from tkinter import *
from fnmatch import fnmatch
from sys import platform

root = Tk()

def status(msg):
    statusBar["text"] = msg

def getText():
    fileToImport = impPathEntry.get()
    fileToExport = expPathEntry.get()
    print(f"имп: {fileToImport}, эксп: {fileToExport}")
    
    fileOpen(fileToImport,fileToExport)

def fileOpen(fileToImport,fileToExport):
    if checkForDots(fileToImport) == False:
        fileToImport += ".pgn"
        print("К имеющемуся пути был добален .pgn")
    elif checkForDots(fileToImport) == None: print("В пути имеется 2 или более точки. Выберите другой путь")
    elif checkForDots(fileToImport) == True: pass
    else: print("Неизвестная ошибка")
    try:
        with open(fileToImport, "r") as impFile:
            unsplitted = impFile.read()
    except FileNotFoundError:
        print("Файла с таким путём не существует, перезапуск")
    splitText(unsplitted,fileToImport,fileToExport)

def splitText(unsplitted,fileToImport,fileToExport):
    splittedList = []
    listCSV = []
    x = 0
    tooSplittedList = unsplitted.split(" ")
    for f in tooSplittedList:
        try:
            if fnmatch(f, "*."): splittedList.append(tooSplittedList[x]+";"+tooSplittedList[x+1]+";"+tooSplittedList[x+2])
            x += 1
        except IndexError:
            splittedList.append(tooSplittedList[x]+";"+tooSplittedList[x+1])
    x = 0
    for i in splittedList:
        listCSV.append(splittedList[x]+";")
        x += 1
    exportToFile(listCSV,fileToImport,fileToExport)

def exportToFile(listCSV,fileToImport,fileToExport):
    if fileToExport != "": 
        if checkForDots(fileToExport) == False:
            fileToExport += ".csv"
            print("К имеющемуся пути был добален .csv")
        elif checkForDots(fileToExport) == None: 
            print("В пути имеется 2 или более точки. Выберите другой путь")
        elif checkForDots(fileToExport) == True: pass
        else: print("Неизвестная ошибка")
        with open(fileToExport, "w") as expFile:
            for item in listCSV:
                expFile.write(str(item) + "\n")
    else:
        if fileToImport == "":
            print("Функция записи .csv в папку исходного .pgn недоступна, так как не указан путь .pgn \n(скорее всего Вами использована функция перевода текста в .csv)")
            exportToFile()
        x = 0
        n = -1
        fileToImportList = list(fileToImport)
        toDelete = []
        for i in fileToImportList:
            n += 1
            if x == 1: toDelete.append(fileToImportList[n])
            if i == ".": 
                x = 1
                toDelete.append(fileToImportList[n])
        for i in reversed(toDelete): 
            fileToImportList.remove(i)
        for i in fileToImportList:
            fileToExport += str(i)
        fileToExport += ".csv"
        with open(fileToExport, "w") as expFile:
            for item in listCSV:
                expFile.write(str(item) + "\n")
    print("Успешный вывод в файл\nПуть файла: ",fileToExport)

def checkForDots(self):
    x = 0
    for i in list(self):
        if i == ".": x += 1
    if x == 0: return False
    if x == 1: return True
    if x >= 2: return None

root['bg'] = '#fafafa'
root.title('pgn splitter v1.5')
root.geometry('500x200')
root.resizable(width=False, height=False)

"""impCanvas = Canvas(root, width=500, height=300)
impCanvas.pack(anchor='n')

impFrame = Frame(root, bg="#ffc3a0")
impFrame.place(width=500,height=200, anchor='n')

expCanvas = Canvas(root, width=500, height=100)
expCanvas.pack(anchor="s")

expFrame = Frame(root, bg="#000000")
expFrame.place(width=500,height=200, anchor="s")"""

impPathEntry = Entry(root)
impPathEntry.pack(anchor='nw',padx=6,pady=6)

impLabel = Label(root, text='импорт')
impLabel.pack(anchor='nw',padx=6,pady=6)

expPathEntry = Entry(root)
expPathEntry.pack(anchor='ne',padx=6,pady=6)

expLabel = Label(root, text='экспорт')
expLabel.pack(anchor='ne',padx=6,pady=6)

statusBar = Label(root)
statusBar.pack(anchor='nw',padx=6,pady=6)

splitButton = Button(root, text='Разделить', command=getText)
splitButton.pack(anchor="se",padx=6,pady=6,fill=X)

root.mainloop()