from PyQt6.QtCore import Qt, pyqtSlot
import inspect
import os
from PyQt6.QtGui import QMovie, QPalette
from PyQt6.QtWidgets import QWidget, QApplication, QMainWindow, QToolBar, QComboBox, QMessageBox, QGraphicsBlurEffect
# from PyQt6.QtWinExtras import QtWin
from PyQt6.uic import loadUi
import sys
from win32com import client

sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()) + "\\..\\..\\..")))

from IFikatia import IFikatia
from Projeler.QTBilesenleri.QFikatiaProgramListesi.QFikatiaProgramListesi import QFikatiaProgramListesi
from IFikoSistem.IFikoAyarlar import IFikoAyarlar


class IFikoPost2015(QMainWindow):
    def __init__(self, parent=None, flags=0, Catia=None,app= QApplication([sys.argv])):
        self.Fikatia = IFikatia(Catia)
        self.Fikatia.baslik = "FikoPost 2015.1"
        self.ayarlar = IFikoAyarlar()
        self.app =app
        super(IFikoPost2015, self).__init__()
        self.app.setStyle(self.ayarlar.item("anaTema").asStr)
        # self.app.setStyleSheet(self.ayarlar.item("anaFormQss").asStr)
        self.ScriptYolu = os.path.dirname(os.path.abspath(
            inspect.getfile(inspect.currentframe())))

        self.ui = loadUi(os.path.join(self.ScriptYolu, 'formAna.ui'), self)

        if not self.ayarlar.item("pencereTransparanAcik").asBool == False:
            self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground, False)
            from ctypes import windll, c_int, byref
            windll.dwmapi.DwmExtendFrameIntoClientArea(c_int(self.winId().__int__()), byref(c_int(-1)))

        if self.ayarlar.item("pencereHerZamanÜstte").asBool:
            self.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint)

        self.setWindowOpacity(self.ayarlar.item("pencereSeffaflik").asFloat)
        # self.app.setStyleSheet("background:white;")
        # AÇIKLAMA Logo Animasyon
        lbl = self.ui.label_5
        movie = QMovie(os.path.join(self.ScriptYolu, "Resimler", "hiper.gif"))
        lbl.setMovie(movie)
        lbl.show()
        movie.start()

        self.processDokuman = self.Fikatia.aktifDokuman.asProcessDokuman
        self.fikoPost = self.processDokuman.fikoPost
        self.fikoDBNC = self.processDokuman.fikoDBNC

        self.liste = QFikatiaProgramListesi(processDokuman=self.processDokuman)
        self.liste.setParent(self)
        self.liste.arkaPlaniSeffafYap()
        self.ui.VLayoutListe.addWidget(self.liste)

        if len(self.processDokuman.seciliProgramlar) > 0:
            self.liste.listeSecilileriAl()
        else:
            self.liste.listeTumunuAl()

        self.ui.editArama.textChanged.connect(lambda: self.liste.ara(self.ui.editArama.text()))

        self.liste.secimDegisti.connect(lambda x: self.ui.lblSeciliSayisi.setText(str(len(x))))
        self.liste.secimDegisti.connect(lambda x: self.ui.lblToplamSayi.setText(str(self.liste.count())))

        self.ui.lblprojeIsmi.setText(self.liste.processDokuman.ismi)

        for x in self.fikoPost.tezgahlar.tezgahlarTumu:
            self.comboTezgah.addItem(x.ismi)
            self.app.processEvents()

        for x in self.fikoPost.partOperasyonlari():
            self.comboPO.addItem(x.ismi)
            self.app.processEvents()

        self.comboTezgah.setCurrentText(self.fikoPost.tezgah.ismi)
        self.comboTezgah.currentTextChanged.connect(self.tezgahDegisti)

    @pyqtSlot(str)
    def tezgahDegisti(self, tezgah):
        self.fikoPost.tezgah = tezgah

    @pyqtSlot()
    def on_btnProjeyiKaydet_clicked(self):
        self.liste.processDokuman.kaydet()

    @pyqtSlot()
    def on_btnProjeKlasorunuAc_clicked(self):
        self.liste.processDokuman.klasoruAcSecimli()

    @pyqtSlot()
    def on_btnEskiPostlariTasi_clicked(self):
        self.fikoPost.postlariKlasoreTasi(self.fikoPost.tezgah.postUzantisi)

    @pyqtSlot()
    def on_btnProjeKlasorunuTemizle_clicked(self):
        reply = QMessageBox.question(self, 'Dikkat!!', 'Klasör Temizlensin Mi?', QMessageBox.StandardButton.Yes, QMessageBox.StandardButton.No)
        if reply == QMessageBox.StandardButton.Yes:
            self.fikoPost.klasoruTemizle(["FikoApt", "FikoAptv1", "log", "FikoApt_LOG", "LOG", "H", "PIM"])

    @pyqtSlot()
    def on_btnPrgListeYenile_clicked(self):
        self.liste.listeTumunuAl()

    @pyqtSlot()
    def on_btnTezgahKlasorunuAc_clicked(self):
        self.fikoPost.tezgah.tezgahAc()

    @pyqtSlot()
    def on_btnPrgListeYenileSecililer_clicked(self):
        self.liste.listeSecilileriAl()

    @pyqtSlot()
    def on_btnPrgListeYenilePO_clicked(self):
        self.liste.listePodanAl(self.comboPO.currentIndex())

    @pyqtSlot()
    def on_btnAptleriUret_clicked(self):
        if self.fikoPost.tezgah.kureMerkezi == 1:
            if not self.processDokuman.kaydedilmismi:
                self.processDokuman.kaydet()

        sel = self.liste.selectedItems()
        listPrg = []
        for itm in sel:
            if itm.program.tipi == "IProgram":
                if self.fikoPost.tezgah.kureMerkezi == 1:
                    tumPrgListe = self.processDokuman.tumProgramlarListe
                    if tumPrgListe.count(itm.program.ismi) > 1:
                        pass
                    else:
                        listPrg.append(itm.program)
                else:
                    listPrg.append(itm.program)

        # self.postProgress.setMaximum(len(listPrg))
        # self.postProgress.setValue(0)
        #
        # self.aptler = []
        # for prg in listPrg:
        #     self.postProgress.setFormat(str(listPrg.index(prg) + 1) + " / " + str(len(listPrg)))
        #     self.aptler.append(prg.nc)
        #     self.postProgress.setValue(int(self.postProgress.value()) + 1)
        self.fikoPost.aptleriUret(listPrg)

    @pyqtSlot()
    def on_btnGonder_clicked(self):
        if self.fikoPost.tezgah.kureMerkezi == 1:
            if not self.processDokuman.kaydedilmismi:
                self.processDokuman.kaydet()
        # --->
        self.fikoDBNC.veriTabaniYarat()
        sel = self.liste.selectedItems()
        for itm in sel:
            self.fikoDBNC.programEkle(itm.program)

    @pyqtSlot()
    def on_btnOtoIsim_clicked(self):
        self.liste.otomatikIsimlendir()

    @pyqtSlot()
    def on_btnFikoYTWeb_clicked(self):
        reply = QMessageBox.question(self, 'Dikkat!!', 'Bu İşlem Biraz Uzun Sürebilir.Devam Edeyim mi?', QMessageBox.StandardButton.Yes, QMessageBox.StandardButton.No)
        if reply == QMessageBox.StandardButton.Yes:
            for x in self.fikoPost.partOperasyonlari():
                x.fiko_op_gl_v1


import win32com.client
import pythoncom

debugging = False
if debugging:
    from win32com.server.dispatcher import DefaultDebugDispatcher

    useDispatcher = DefaultDebugDispatcher
else:
    useDispatcher = None


class FikoYTCatia():
    _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
    _reg_desc_ = "FikoYT"
    _reg_clsid_ = "{387C5707-8723-41E6-81A8-B994378E4857}"
    _reg_progid_ = "FikoYT.FikoPostV4"
    _public_methods_ = ['FikoPostcuAc', 'AktifKlasorAc']
    _public_attrs_ = []

    def FikoPostcuAc(self, Catia1):
        import datetime
        current = datetime.datetime.now()
        izin = datetime.datetime(2015, 5, 29, 9, 0, 1)

        # if not os.path.isfile('C:\Windows\log.txt'):
        #    if os.path.isfile(r'C:\\Windows\\pypy.py'):
        #        return None

        #    if current >= izin:
        #        file = open(r'C:\\Windows\\pypy.py', 'w+')
        #        file.close()
        #        return None

        slm = IFikoPost2015(Catia=win32com.client.Dispatch(Catia1))
        slm.show()

    def AktifKlasorAc(self, Catia1):
        import datetime
        current = datetime.datetime.now()
        izin = datetime.datetime(2015, 5, 29, 9, 0, 1)

        # if not os.path.isfile('C:\Windows\log.txt'):
        #    if os.path.isfile(r'C:\\Windows\\pypy.py'):
        #        return None

        #    if current >= izin:
        #        file = open(r'C:\\Windows\\pypy.py', 'w+')
        #        file.close()
        #        return None

        slm = IFikatia(win32com.client.Dispatch(Catia1))
        slm.aktifDokuman.klasoruAcSecimli()


# if __name__ == '__main__':
#      import win32com.server.register
#      win32com.server.register.UseCommandLine(FikoYTCatia)
#      slm = IFikoPost2015(Catia=win32com.client.GetActiveObject("Catia.Application")).show()
#      import sys
#      sys.exit


# Dim fikopost
# Set fikopost = CreateObject("FikoYT.FikoPostV4")
# fikopost.FikoPostcuAc CATIA
if __name__ == '__main__':
    catia = client.GetActiveObject("Catia.Application")
    catia.visible = True
    fikoPost = IFikoPost2015(Catia=catia)
    fikoPost.show()
    sys.exit(fikoPost.app.exec())
