'''
Created on 02.08.2019

@author: mdoc
'''

from mutil.XmlExtractor import XmlExtractor
from mutil import XmlExtractor as XMLE
import re
'''
def outfirst(outfile, tpllayer, attrs, value):
    if tpllayer["value"]:
        ostr = tpllayer["value"]
        if "$value" in ostr:
            ostr = re.sub(r"\$value", value, ostr, flags=re.MULTILINE)
        print (ostr, end="", file=outfile)

def outlast(outfile, tpllayer, attrs, value):
    if tpllayer["value"]:
        print (file=outfile)
'''
def process_file_layer(source, outfile, globals, hierarc):


    (ctl,elem, value, attrs) = source.extractElement(XMLE.EC_BEG)
    while ctl != XMLE.EC_END:
        items = None
        nexthiera = {}
        if elem in hierarc:
            items = hierarc[elem]
        elif elem in globals:
            items = globals[elem]
        else:
            print ("Warning: No mapping for item:" +elem)
        if items:
            # search for "first"
            for item in items:
                if "position" in item["attrs"]:
                    if item["attrs"]["position"] == "first":
                        print (item["value"], end="", file=outfile)
            # proceed working
            for item in items:
                if not "position" in item["attrs"]:
                    nexthiera = item["items"]
                    if value:
                        print (value, end="", file=outfile)
                    process_file_layer(source, outfile, globals, nexthiera)
            # search for "last"
            for item in items:
                if "position" in item["attrs"]:
                    if item["attrs"]["position"] == "last":
                        print (item["value"], end="", file=outfile)
        (ctl,elem, value, attrs) = source.extractElement(ctl)
        
def convert (file, format):
    
    source = XmlExtractor()
    source.openInput(file)

    # read whole template
    tple = XmlExtractor()
    tpl = tple.readFile("tpl/"+format+".tpl")
    globals = tpl["mdoc"][0]["items"]["global"][0]["items"]
    hierarc = tpl["mdoc"][0]["items"]["hierarchical"][0]["items"]
    
    # open output file
    ext = tpl["mdoc"][0]["attrs"]["extension"]
    outname = re.sub(r"\.xml", "."+ext, file)
    outfile = open(outname, "w")
    #print ("hallo", file=outfile)
    
    process_file_layer(source, outfile, globals, hierarc)
    
