import json
import os


class IFikoAptv1():
    prg = None
    __importDosya = None
    __exportDosya = None

    aktif_satir: str = "BAS"
    aktivite_say = 0

    son = {
        "takim_yonu": None,
        "devir": ["0", "YOK", "YOK"],
        "hiz":  ["0", "YOK"],
        "aktivite_ismi": None,
        "aktivite": None,
        "son_x": None,
        "son_y": None,
        "son_z": None,
    }

    def __init__(self, prg, kureMerkezi:bool=False):
        self.prg = prg
        self.prg.marshalOku()
        dosya_yolu = prg.aptUretNormal() if not kureMerkezi else prg.aptUretToolCenter()
        self.__importDosya = open(
            dosya_yolu, 'r', encoding="utf-8", errors='ignore')
        self.__exportDosya = open(dosya_yolu.replace(
            ".FikoApt", ".FikoAptv1"), 'w', encoding="utf-8", errors='ignore')
        self.baslat()

    def baslat(self):
        self.__exportDosya.writelines(
            [f"#$ FikoYT PROGRAM BASLANGICI {self.prg.ismi}\n"])
        self.__exportDosya.writelines(
            [json.dumps(self.prg.toFikoGL, ensure_ascii=False), "\n"])

        while self.aktif_satir != None:
            while not (self.aktif_satir.startswith("PPRINT OPERATION NAME : ") or self.aktif_satir.startswith("$$ OPERATION NAME : ")):
                self.aktif_satir = self.__importDosya.readline()
                if self.aktif_satir.strip() == '':
                    break
            if self.aktif_satir.strip() == '':
                break
            print(self.aktivite_say)
            self.son["aktivite"] = self.prg.aktiviteler[self.aktivite_say]

            self.__exportDosya.writelines(
                [f"#FIKOYT AKTIVITE BASLANGIC: {self.aktivite_say}, ISMI {self.aktif_satir.replace('PPRINT OPERATION NAME : ','').replace('$$ OPERATION NAME : ','')}"])
            self.son["aktivite_ismi"] = self.aktif_satir.replace(
                'PPRINT OPERATION NAME : ', '').replace('$$ OPERATION NAME : ', '')
            self.aktif_satir = self.__importDosya.readline()

            while not (self.aktif_satir.startswith("PPRINT  End of generation of : ") or self.aktif_satir.startswith("$$  End of generation of : ")):

                self.aktif_satir = self.__importDosya.readline()
                if self.aktif_satir.strip() == '':
                    break
                if self.aktif_satir.startswith("PPRINT "):
                    self.apt_PPRINT()
                elif self.aktif_satir.startswith("PPRINT/"):
                    self.apt_PPRINTSlash()
                elif self.aktif_satir.startswith("INSERT"):
                    self.apt_INSERT()
                elif self.aktif_satir.startswith("TLAXIS/"):
                    self.apt_TLAXIS()
                elif self.aktif_satir.startswith("GOTO  /"):
                    self.apt_GOTO()
                elif self.aktif_satir.startswith("SPINDL/"):
                    self.apt_SPINDL()
                elif self.aktif_satir.startswith("FEDRAT/"):
                    self.apt_FEDRAT()
                elif self.aktif_satir.startswith("CUTTER/"):
                    self.apt_CUTTER()
                else:
                    if not (self.aktif_satir.startswith("PPRINT  End of generation of : ") or self.aktif_satir.startswith("$$  End of generation of ")):
                        # self.aktif_satir = self.__importDosya.readline()
                        self.__exportDosya.writelines(self.aktif_satir)

            self.__exportDosya.writelines(
                [f"#FIKOYT AKTIVITE BITIS: {self.aktivite_say}, ISMI {self.son['aktivite_ismi'] }"])
            self.aktivite_say += 1
            self.aktif_satir = self.__importDosya.readline()
            if self.aktif_satir.strip() == '':
                break
            if self.aktivite_say>=self.prg.aktiviteler.sayisi:
                break
        self.__exportDosya.writelines(
            [f"#$ FikoYT PROGRAM BITIS {self.prg.ismi}"])
        self.__exportDosya.close()
        self.__importDosya.close()

    def ayikla_program_baslangici(self):
        pass

    def apt_PPRINT(self):
        if not (self.aktif_satir.startswith("PPRINT  End of generation of : ") or self.aktif_satir.startswith("$$  End of generation of : ")):
            self.__exportDosya.writelines(
                self.aktif_satir.replace("PPRINT ", "#NCYAZ "))

    def apt_PPRINTSlash(self):
        if not (self.aktif_satir.startswith("PPRINT  End of generation of : ") or self.aktif_satir.startswith("$$  End of generation of : ")):
            self.__exportDosya.writelines(
                self.aktif_satir.replace("PPRINT/", "#NCYAZ "))

    def apt_INSERT(self):
        self.__exportDosya.writelines(
            self.aktif_satir.replace("INSERT", "#NCEKLE"))

    def apt_TLAXIS(self):
        __takim_yonler = self.aktif_satir.replace(
            "TLAXIS/", "").replace(" ", "").strip()
        self.son["takim_yonu"] = __takim_yonler
        self.__exportDosya.writelines(f"TKMYON {__takim_yonler}\n")

    def apt_GOTO(self):
        __takim_koor = self.aktif_satir.replace(
            "GOTO  /", "").replace(" ", "").strip()
        self.__exportDosya.writelines(
            f"GIT {__takim_koor}\n")
        # __koordinat_x, __koordinat_y, __koordinat_z = __takim_koor.split(",")

        # __koordinat_x = f"{float(__koordinat_x):.3f}"
        # __koordinat_y = f"{float(__koordinat_y):.3f}"
        # __koordinat_z = f"{float(__koordinat_z):.3f}"
        
        # if __koordinat_x == self.son["son_x"]:
        #     __koordinat_x = ""
        # else:
        #     self.son["son_x"]= __koordinat_x
        # if __koordinat_y == self.son["son_y"]:
        #     __koordinat_y = ""
        # else:
        #     self.son["son_y"]= __koordinat_y
        # if __koordinat_z == self.son["son_z"]:
        #     __koordinat_z = ""
        # else:
        #     self.son["son_z"]= __koordinat_z
        # self.__exportDosya.writelines(
        #     f"GIT {__koordinat_x},{__koordinat_y},{__koordinat_z} \n")

    def apt_SPINDL(self):
        __devir = self.aktif_satir.replace(
            "SPINDL/", "").replace(" ", "").strip().split(",")
        self.son["devir"] = __devir
        self.__exportDosya.writelines(
            [f"DEVIR {self.son['devir'][0]}|{self.son['devir'][1]}|{self.son['devir'][2]}\n"])

    def apt_FEDRAT(self):
        __hiz = self.aktif_satir.replace(
            "FEDRAT/", "").replace(" ", "").strip().split(",")
        __hizDurum = float(__hiz[0])
        if self.son["aktivite"].turu not in ["ToolChange", "Start", "Stop", "Stop", "PPInstruction"]:
            if __hizDurum == self.son["aktivite"].ilerlemeIsleme:
                __hiz.append("ISLEME")
            elif __hizDurum == self.son["aktivite"].ilerlemeYaklasma:
                __hiz.append("YAKLASMA")
            elif __hizDurum == self.son["aktivite"].ilerlemeUzaklasma:
                __hiz.append("UZAKLASMA")
            elif __hizDurum == 0.0000:
                __hizDurum = 10000
                __hiz.append("HIZLI")
            elif __hizDurum == self.son["aktivite"].ilerlemeFinis:
                __hiz.append("FINIS")
            else:
                __hiz.append("BOSTA")
        else:
            __hiz.append("BILINMIYOR")
        self.son["hiz"] = __hiz
        self.__exportDosya.writelines(
            [f"ILERLEME {self.son['hiz'][0]}|{self.son['hiz'][1]}|{self.ilerleme_sorgula(float(self.son['hiz'][0]))}\n"])

    def ilerleme_sorgula(self, ilerleme):
        if self.son["aktivite"].turu not in ["ToolChange", "Start", "Stop", "Stop", "PPInstruction"]:
            if ilerleme == self.son["aktivite"].ilerlemeIsleme:
                return "ISLEME"
            elif ilerleme == self.son["aktivite"].ilerlemeYaklasma:
                return "YAKLASMA"
            elif ilerleme == self.son["aktivite"].ilerlemeUzaklasma:
                return "UZAKLASMA"
            elif ilerleme == self.son["aktivite"].ilerlemeFinis:
                return "FINIS"
            else:
                return "BOSTA"
        else:
            return "BILINMIYOR"

    def apt_CUTTER(self):
        __takim = self.aktif_satir.replace(
            "CUTTER/", "").replace(" ", "").replace("$", "").strip()
        __takim1 = self.__importDosya.readline().replace(" ", "").replace("$", "").strip()

        self.__exportDosya.writelines(f"TAKIM {__takim+__takim1}\n")
