import inspect
import os
import sys

import win32com.client
from PyQt6.QtCore import pyqtSlot, QVariant, Qt, pyqtSignal
from PyQt6.QtGui import QMovie
from PyQt6.QtWidgets import QMainWindow, QApplication
from PyQt6.uic import loadUi

sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()) + "\\..\\..")))

from IFikatia import IFikatia
from IDialoglar.IFikoProductToPart.threadManager import Async
from IDokuman import IDokuman
from IProduct import IProduct


class IFikoProductToPart(QMainWindow):
    sinyal = pyqtSignal(str, QVariant)

    def __init__(self, parent=None, flags=0, Catia=None):
        self.__fikatia = IFikatia(obj=Catia)
        self.__dokuman = self.__fikatia.aktifDokuman
        self.app = QApplication([sys.argv])
        super(IFikoProductToPart, self).__init__()

        self.ScriptYolu = os.path.dirname(os.path.abspath(
                inspect.getfile(inspect.currentframe())))
        self.ui = loadUi(self.ScriptYolu + r'\\formAna.ui', self)

        # AÇIKLAMA İndicatör Animasyon
        lbl = self.ui.labelIndicator
        movie = QMovie(os.path.join(self.ScriptYolu, "Resimler", "load.gif"))
        lbl.setMovie(movie)
        lbl.show()
        movie.start()

        # AÇIKLAMA Logo Animasyon
        lbl = self.ui.labelLogo
        movie = QMovie(os.path.join(self.ScriptYolu, "Resimler", "hiper.gif"))
        lbl.setMovie(movie)
        lbl.show()
        movie.start()

        # AÇIKLAMA Logo Animasyon
        lbl = self.ui.indicatorOk
        movie = QMovie(os.path.join(self.ScriptYolu, "Resimler", "ok.gif"))
        lbl.setMovie(movie)
        lbl.show()
        movie.start()

        self.setWindowFlags(Qt.WindowType.Window | Qt.WindowType.WindowCloseButtonHint | Qt.WindowType.CustomizeWindowHint | Qt.WindowType.WindowStaysOnTopHint)

        self.__aktifItem = None
        self.sinyal.connect(self.sinyalGeldi)

    def sinyalGeldi(self, sinyal, argumanlar=None):
        if sinyal=="ok":
            self.ui.stackedWidget.setCurrentIndex(2)

    def show(self):
        # print(self.__partDokuman.secililer.sec3(["HybridShapeCurveSmooth"],"Çizgi Seç",True))
        super(IFikoProductToPart, self).show()

    def closeEvent(self, *args, **kwargs):
        super(IFikoProductToPart, self).closeEvent(*args, **kwargs)

    @pyqtSlot()
    def on_btnBuyukLogo_clicked(self):
        print("Logo Tıklandı")

    @pyqtSlot()
    def on_btnCatiaAktifEt_clicked(self):
        @Async()
        def aktifEt(fikatia, sinyal=self.sinyal):
            dokuman = IFikatia(obj=fikatia)
            dokuman.aktifEt()
            sinyal.emit("uyariGoster", { "uyari": "Catia Aktif Edildi", "sinif": "uyariBasarili" })

        # --->
        aktifEt(self.__fikatia)
        # self.__fikatia.aktifEt()
        print("Catia Aktif Et Tıklandı")

    @pyqtSlot()
    def on_btnKlasorAc_clicked(self):
        @Async()
        def klasorAc(dokuman, sinyal=self.sinyal):
            dokuman = IDokuman(obj=dokuman, sahip=IFikatia(obj=dokuman.parent))
            dokuman.klasoruAcSecimli()
            sinyal.emit("uyariGoster", { "uyari": "Döküman Klasörü Açıldı", "sinif": "uyariBasarili" })

        # --->
        klasorAc(self.__dokuman)
        # self.__fikatia.aktifDokuman.klasoruAcSecimli()
        print("Catia Klasör Aç Tıklandı")

    @pyqtSlot()
    def on_btnProductSec_clicked(self):
        self.setVisible(False)
        # --->
        secililer = self.__dokuman.secililer
        durum = secililer.sec2(["Product"], Mesaj="Lütfen Product Seçiniz")
        if durum == "Normal":
            self.__aktifItem = secililer.item2(0).nesne
            self.textProduct.setText(self.__aktifItem.ismi)
            self.textCiktiIsmi.setText(self.__aktifItem.ismi)
            self.setVisible(True)
        else:
            self.__fikatia.durumCubugu = "Seçim İptal Edildi"
            self.setVisible(True)
        # --->
        self.setVisible(True)
        print("Product Seç Tıklandı")

    @pyqtSlot()
    def on_btnProductSil_clicked(self):
        self.textProduct.setText("")
        self.textCiktiIsmi.setText("")
        self.__aktifItem = None
        # --->
        print("Product Temizle Tıklandı")

    @pyqtSlot()
    def on_btnOlustur_clicked(self):
        @Async()
        def olustur(dokuman, ciktiIsmi, sinyal=self.sinyal):
            __nesne = IProduct(obj=dokuman)
            __nesne.partaCevir(ciktiIsmi)
            sinyal.emit("ok", None)
        # --->
        olustur(self.__aktifItem.catNesne, self.textCiktiIsmi.text())
        self.ui.stackedWidget.setCurrentIndex(1)
        print("Part Oluştur Tıklandı")

    @pyqtSlot()
    def on_btnCikis_clicked(self):
        self.close()
        print("Çıkış Tıklandı")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    cizgiYumusatici = IFikoProductToPart(Catia=win32com.client.Dispatch("Catia.Application"))
    cizgiYumusatici.show()

    sys.exit(app.exec())
