# -*- coding: cp1252 -*-
try:
    import tkinter as tk
    from tkinter import ttk
except Exception as e:
    print("tkinter didn't import: {}".format(e))
try:
    from io import StringIO,BytesIO
    import io ## for Python 3
    from Crypto.Cipher import AES
    import os,sys,xml.dom.minidom
except ImportError:
    import tkinter as tk
    from tkinter import ttk
    from io import StringIO,BytesIO
    import io ## for Python 3
    from Crypto.Cipher import AES
    import os,sys,xml.dom.minidom


def get_main_dir():
    try:
        sys.frozen
    except AttributeError:
        path = sys.argv[0]
    else:
        path = sys.executable
    return os.path.dirname(os.path.abspath(path))

oscurdir1=get_main_dir()
i=len(oscurdir1)
oscurdir=""
torgol=False
lenon={}
y=0
for x in range(0,i):
    try:
        if oscurdir1[x:int(x+1)]=='/':
            lenon[int(y)]=int(x)+1
            y=y+1
        oscurdir=oscurdir+oscurdir1[x:x+1]
    except:
        pass
if torgol==False:
    oscurdir=oscurdir1[:int(lenon[int(y)-3])]
##if torgol==False:
##    oscurdir=oscurdir1
osdir=oscurdir
chemFS= osdir + os.sep+"stylist"+os.sep+"EncoDinG.xml"
ixim = open(chemFS,'r')
xim = xml.dom.minidom.parse(ixim)
ixim.close()
lorpoz = xim.getElementsByTagName('Encoding')
for lapaz in lorpoz:
    Str_EncoD=lapaz.getAttribute('EncoD')
lanpoz = xim.getElementsByTagName('SeleCT')
for lanpaz in lanpoz:
    lang=lanpaz.getAttribute('LanG')


##def get_main_dir():
##    try:
##        sys.frozen
##    except AttributeError:
##        path = sys.argv[0]
##    else:
##        path = sys.executable
##    return os.path.dirname(os.path.abspath(path))
##
##oscurdir1=get_main_dir()
##i=len(oscurdir1)
##oscurdir=""
##torgol=False
##print (oscurdir1)
##for x in range(0,i):
##    try:
##        if oscurdir1[x:int(x+15)]=='/wim-server.app':
##            torgol=True
##            break
##        else:
##            oscurdir=oscurdir+oscurdir1[x:x+1]
##        #print (oscurdir1[x:int(x+8)])
##    except:
##        oscurdir=oscurdir+oscurdir1[x:x+1]
####if torgol==False:
####    oscurdir=oscurdir1
    



class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("640x180")
        self.title("Work'in Memories Web Server Configuration")
        self.iconbitmap(bitmap= os.curdir + os.sep+"stylist"+os.sep+'TrsPicon.ico')

        # initialize data
        self.languages = ('Francais', 'English')
        self.server = ()

        # set up variable
        self.option_var = tk.StringVar(self)
        self.server_var = tk.StringVar(self)
        self.login_var = tk.StringVar(self)
        self.pass_var = tk.StringVar(self)
        self.login_var.set("")
        self.pass_var.set("")

        # create widget
        self.ask_for_language()

    def ask_for_language(self):
        # padding for widgets using the grid layout
        paddings = {'padx': 5, 'pady': 5}

        # label
        label = ttk.Label(self,  text='Language:')
        label.grid(column=0, row=0, sticky=tk.W, **paddings)

        # option menu
        option_menu = ttk.OptionMenu(
            self,
            self.option_var,
            self.languages[0],
            *self.languages,
            command=self.option_changed)

        option_menu.grid(column=1, row=0, sticky=tk.W, **paddings)

        # output label
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=0, row=1, sticky=tk.W, **paddings)

    def ask_for_server(self):
        # padding for widgets using the grid layout
        paddings = {'padx': 5, 'pady': 5}

        # label
        label = ttk.Label(self,  text=self.Lib_ChoixServeur)
        label.grid(column=0, row=0, sticky=tk.W, **paddings)

        # option menu
        option_menu = ttk.OptionMenu(
            self,
            self.server_var,
            self.server[0],
            *self.server,
            command=self.server_changed)

        option_menu.grid(column=3, row=0, sticky=tk.W, **paddings)

        # output label
        self.output_label = ttk.Label(self, foreground='red')
        self.output_label.grid(column=0, row=1, sticky=tk.W, **paddings)

    def ask_for_user(self):
        # padding for widgets using the grid layout
        paddings = {'padx': 5, 'pady': 5}

        # label
        labellogin = ttk.Label(self,  text=self.Lib_Login)
        labellogin.grid(column=1, row=1, sticky=tk.W, **paddings)
        entrylogin = ttk.Entry(self, textvariable=self.login_var, width="18")
        entrylogin.grid(column=2, row=1, sticky=tk.W, **paddings)
        labelpass = ttk.Label(self,  text=self.Lib_Password)
        labelpass.grid(column=1, row=2, sticky=tk.W, **paddings)
        entrypass = ttk.Entry(self, textvariable=self.pass_var, width="18",show=False)
        entrypass.grid(column=2, row=2, sticky=tk.W, **paddings)



    def option_changed(self, *args):
        chemFS= osdir + os.sep+"stylist"+os.sep+"LanGage.xml"
        ixim = open(chemFS,'r')
        xim = xml.dom.minidom.parse(ixim)
        ixim.close()
        lipoz = xim.getElementsByTagName(str(self.option_var.get()))
        for lipaz in lipoz:
            self.Lib_ChoixServeur=lipaz.getAttribute('ChoixServeur')
            self.Lib_ChoixChronos=lipaz.getAttribute('ChoixChronos')
            self.Lib_ChoixPersonnel=lipaz.getAttribute('ChoixPersonnel')
            self.Lib_Login=lipaz.getAttribute('Login')
            self.Lib_Password=lipaz.getAttribute('Password')
        self.server= (self.Lib_ChoixChronos,self.Lib_ChoixPersonnel)
        self.ask_for_server()

    def server_changed(self, *args):
        paddings = {'padx': 5, 'pady': 5}
        save = ttk.Button(self, command=self.saveconfig, text="Save")
        save.grid(column=3, row=2, sticky=tk.W, **paddings)
        if self.server_var.get()==self.Lib_ChoixChronos:
            self.choix="ServerChronos"
        if self.server_var.get()==self.Lib_ChoixPersonnel:
            self.choix="ServerPerso"
            self.ask_for_user()
    def ElBrassoR(self):
        global ElChaloR
        MelChioR='GSDGJSVPIGJVGBJPOGJPJGPGJPSP11VSEGTSBSSVVDVSVDG353553BDBHYFHDJHDIHTHBYHDHYYHYDHYDD'    
        ElGrandeMatadoR='HY6YYHTD8HN68DFY48HYRH74T876H4DR3H43HGGJJ8Y8TY4D34GHR8RY38FYH4348RHDRFDV5843YH4374YH874DTY38H4DY384R3D8H4DY34D3K84OU8HL45843Q84AG84AZ84RFTHDFY38JU4834FKU4K4K8ULO4Y3RY13DET463J434JR3T84J43I6U87KL4Y38937TR94R3J8448K3R864783R684786I438'
        ElCondoR='4YBD3H4DERRTYTYYH834DFHY384H7HDFY384HDFY84GUH3HYF3JH4JY3O8L43H843V8FY4VD84D384H3V8UT4K3B1T3BK43F8K43I84N54V38D8FY789EY874DY1HC836168H46UI4OGM6I84FCD6T8C4X6ER46SG84TY686TY4GHVSRHY46CRY8HC6Y87468RSX4XS84SEG7BV76F8JU4IUL86OM486I4GJUV864F86DYT4C6'
        ElMatadoR='HY68HYHTYN68DFY48HTYHTHYYRH74T876H4DR3H438DDSDY8TY4D34GHR8RY38FYH4348RHDR843YH4374YH874DTY38H4DY384R3D8H4DY34D3K84OU8HL45843Q84AG84AZ84RFTHDFY38JU4834FKU4K4K8ULO4Y3RY13DET463J434JR3T84J43I6U87KL4Y38937TR94R3J8448K3R864783R684786I438'
        ElChaloR=MelChioR[4:6]+ElGrandeMatadoR[8:10]+ElCondoR[18:20]+ElMatadoR[11:13]+MelChioR[5:7]+ElCondoR[20:22]+ElGrandeMatadoR[25:27]+ElCondoR[28:30]+ElMatadoR[17:19]+ElGrandeMatadoR[21:23]+MelChioR[12:14]+ElMatadoR[30:32]
        return ElChaloR

    def TSave(self):
        global XTstring,jak,ElChaloR
        #print '-begin-'
        try:
            ElChaloR=self.ElBrassoR()
            jak='2164691737824342'
            rept= osdir + os.sep+'server.gwh'
            def Gencrypt(results,outputfile):
                global jak,ElChaloR
                encryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
                #decryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
                chunksize=(64*1024)
                mlogfile = open(outputfile, 'wb')
                ret=''
                while True:
                    chunk = results.read(chunksize)
                    if len(chunk)==0:
                        break               
                    mret=chunk
                    ret=ret+mret.decode()
                if float(len(ret)/16).is_integer()==False:
                    while float(len(ret)/16).is_integer()==False:
                        ret += ' ' 
                djunky=encryptor.encrypt(ret)
                mlogfile.write(djunky)
                mlogfile.close()
            class TTransPak:
                def write(self,data):
                    outputin.write(data.encode('utf-8'))
            outputin = io.BytesIO()
            XTstring.writexml(TTransPak(), encoding='utf-8')
            results = io.BytesIO(outputin.getvalue())        
            Gencrypt(results,rept)
            outputin.close()
            results.close()
            return 'config saved'
        except:
            return 'save error'

    def saveconfig(self, *args):
        global XTstring,jak,ElChaloR,oscurdir
        paddings = {'padx': 5, 'pady': 5}
        ElChaloR=self.ElBrassoR()
        jak='2164691737824342'
        def startX():
            global ElChalor,jak,oscurdir
            zrept=osdir+os.sep+'need'+os.sep+'zero.gwh'
            logfile = open(zrept, mode ='rb')
            def Gdecrypt(outputin,result):
                xdecryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
                chunksize=(64*1024)
                rep=''
                while True:
                    chunk=''
                    chunk=outputin.read(chunksize)
                    if len(chunk)==0:
                        break
                    elif len(chunk)%16!=0:
                        chunk += ' ' * (16-len(chunk) % 16 )
                    mrep=xdecryptor.decrypt(chunk)
                    rep=rep+mrep.decode()
                logfile.close()
                result.write(rep)
                return result
            outputin = io.BytesIO(logfile.read())
##                        outputin.write(logfile.read())
            result = io.StringIO()
            #detr=obj.decrypt(outputin.getvalue())
            Gdecrypt(outputin,result)
            #result.write(detr)
            drunk=result.getvalue()
            lou=len(drunk)
            drink=''
            #print repr(drunk)
            for c in range(0,lou):
                try:
                    if drunk[c:c+7]=='</PrsP>':
                        drink=drink+'</PrsP>'
                        break
                    else:drink=drink+drunk[c]
                except:
                    pass
            #print repr(drink)
            xim=xml.dom.minidom.parseString(drink)
##            zrept=oscurdir+os.sep+'wok'+os.sep+'need'+os.sep+'zero.xml'
##            logfile = open(zrept, mode ='r')
##            xim =xml.dom.minidom.parse(logfile)
##            logfile.close()
            return xim
        XTstring=startX()
        try:
            racine=XTstring.documentElement
            element =XTstring.createElement("PrsP")
            element.setAttribute('ChoixServeur',self.choix)
            element.setAttribute('Login',self.login_var.get())
            element.setAttribute('Password',self.pass_var.get())
            racine.appendChild(element)
            self.savelabel=self.TSave()
            labelsave = ttk.Label(self,  text=self.savelabel)
            labelsave.grid(column=3, row=1, sticky=tk.W, **paddings)
        except:
            labelerreur = ttk.Label(self,  text="Save Error")
            labelerreur.grid(column=3, row=1, sticky=tk.W, **paddings)
if __name__ == "__main__":
    root = App()
    root.mainloop()
