import inspect
import os
import sys

import pythoncom
import win32com.client
from PyQt6.QtCore import pyqtSlot, QVariant, Qt
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QMainWindow, QApplication, QListWidgetItem
from PyQt6.uic import loadUi

sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()) + "\\..\\..")))

from IFikatia import IFikatia
from IPart import IPart


class IFikoDialogCizgiYumusatici(QMainWindow):
    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(IFikoDialogCizgiYumusatici, self).__init__()

        self.ScriptYolu = os.path.dirname(os.path.abspath(
                inspect.getfile(inspect.currentframe())))
        self.ui = loadUi(self.ScriptYolu + r'\\formAna.ui', self)

        self.ui.btnOnizle.setVisible(False)

        self.setWindowFlags(Qt.WindowType.Window | Qt.WindowType.WindowCloseButtonHint | Qt.WindowType.CustomizeWindowHint | Qt.WindowType.WindowStaysOnTopHint)

    def show(self):
        # print(self.__partDokuman.secililer.sec3(["HybridShapeCurveSmooth"],"Çizgi Seç",True))
        super(IFikoDialogCizgiYumusatici, self).show()

    def closeEvent(self, *args, **kwargs):
        super(IFikoDialogCizgiYumusatici, self).closeEvent(*args, **kwargs)

    @pyqtSlot()
    def on_btnEkle_clicked(self):
        # print(self.__dokuman.secililer.item(0).turu)
        self.setVisible(False)
        try:
            self.__fikatia.durumCubugu = "Lütfen Çizgi Seçiniz"
            durum = self.__dokuman.secililer.sec3(["HybridShapeCurveExplicit", "Sketch"])
            if durum == "Normal":
                catSecililer = self.__dokuman.secililer
                for x in range(catSecililer.sayisi2 + 1):
                    catNesne = catSecililer.item2(x).nesne
                    self.listeItemEkle(catNesne.ismi, [catNesne])
                self.setVisible(True)
            else:
                self.setVisible(True)
                self.__fikatia.durumCubugu = "Çizgi Seçimi İptal Edildi"
        except:
            self.setVisible(True)
        print("Ekle Tıklandı")
        # -->
        self.listeSayiGuncelle()

    @pyqtSlot()
    def on_btnSil_clicked(self):
        secililer = self.ui.listeCurve.selectedItems()
        for itm in secililer:
            self.ui.listeCurve.takeItem(self.ui.listeCurve.row(itm))
        print("Sil Tıklandı")
        # -->
        self.listeSayiGuncelle()

    @pyqtSlot()
    def on_btnListeTemizle_clicked(self):
        self.ui.listeCurve.clear()
        print("Liste temizle Tıklandı")
        # -->
        self.listeSayiGuncelle()

    @pyqtSlot()
    def on_btnTamam_clicked(self):
        # AÇIKLAMA Ayrı Body Seçilmiş İse
        if self.ui.checkAyriBody.isChecked():
            if self.__dokuman.turu.upper() == ".CATPART":
                part = self.__dokuman.asPartDokuman.part
            elif self.__dokuman.turu.upper() == ".CATPRODUCT":
                part = self.__dokuman.asProductDokuman.product.dokuman.asPartDokuman.part
            elif self.__dokuman.turu.upper() == ".CATPROCESS":
                part = self.__dokuman.asProcessDokuman.partOperasyonlari[0].urunDokumani.dokuman.asPartDokuman.part
            else:
                self.__dokuman.secililer.ara(".Part;all")
                part = IPart(obj=self.__dokuman.secililer.item2(0).nesne.catNesne,
                             sahip=self.__dokuman.anaProgram.catNesne)
            bodyer = part.catNesne.hybridBodies

            fikoBody = bodyer.add()
            fikoBody.name = self.ui.editAyriBody.text()
        # AÇIKLAMA FikoNesneler Oluşturuyor
        for x in range(self.ui.listeCurve.count()):
            data = self.ui.listeCurve.item(x).data(Qt.ItemDataRole.UserRole)
            self.catiaElementEkle(data[0].catNesne)
        self.close()
        # -->
        print("Buton Tamam Tıklandı")

    @pyqtSlot()
    def on_btnOnizle_clicked(self):

        # --->
        print("Buton Önizle Tıklandı")

    @pyqtSlot()
    def on_btnIptal_clicked(self):
        self.close()
        print("Buton Önizle Tıklandı")

    @pyqtSlot(float)
    def on_spinAcisalSinir_valueChanged(self, value):
        print(value)

    @pyqtSlot(float)
    def on_spinCizgiselSinir_valueChanged(self, value):
        print(value)

    @pyqtSlot(float)
    def on_spinDeformasyon_valueChanged(self, value):
        print(value)

    @pyqtSlot(bool)
    def on_checkAyriBody_toggled(self, value):
        print(value)

    @pyqtSlot(QListWidgetItem)
    def listeItemEkle(self, baslik: str = "Başlık Yok", veri: QVariant = None, icon: str = None):
        itm = QListWidgetItem(baslik)
        itm.setIcon(QIcon(os.path.join(self.ScriptYolu, "Resimler", "ok.png")))
        itm.setData(Qt.ItemDataRole.UserRole, veri)
        self.ui.listeCurve.addItem(itm)
        # -->
        self.listeSayiGuncelle()

    @pyqtSlot()
    def listeSayiGuncelle(self):
        labelListeSayi = self.ui.labelListeSayi
        # --->
        __toplamSayi = self.ui.listeCurve.count()
        # __seciliSayi = len(self.uı.listeCurve.selectedItems())
        # --->
        labelListeSayi.setText("{0} Adet".format(__toplamSayi))

    def catiaElementEkle(self, catNesne):
        scriptDosya = os.path.join(self.ScriptYolu, "FikoCizgiYumusatici.FikoDll")
        print(self.__dokuman.turu.upper())
        if self.__dokuman.turu.upper() == ".CATPART":
            part = self.__dokuman.asPartDokuman.part
        elif self.__dokuman.turu.upper() == ".CATPRODUCT":
            part = self.__dokuman.asProductDokuman.product.dokuman.asPartDokuman.part
        elif self.__dokuman.turu.upper() == ".CATPROCESS":
            part = self.__dokuman.asProcessDokuman.partOperasyonlari[0].urunDokumani.dokuman.asPartDokuman.part
        else:
            self.__dokuman.secililer.ara(".Part;all")
            part = IPart(obj=self.__dokuman.secililer.item2(0).nesne.catNesne, sahip=self.__dokuman.anaProgram.catNesne)

        factory = part.catNesne.GetCustomerFactory("InstanceFactory")

        factory.BeginInstanceFactory("FikoCizgiYumusatici", scriptDosya)

        factory.BeginInstantiate()
        factory.PutInputData("Cizgi", catNesne)

        Instance = factory.Instantiate()

        factory.EndInstantiate()
        factory.EndInstanceFactory()

        Instance.GetParameter("acisalSinir").value = self.ui.spinAcisalSinir.value()
        Instance.GetParameter("cizgiselSinir").value = self.ui.spinCizgiselSinir.value()
        Instance.GetParameter("deformasyon").value = self.ui.spinDeformasyon.value()

        part.guncelle()

        param1 = Instance

        return param1


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    cizgiYumusatici = IFikoDialogCizgiYumusatici(Catia=win32com.client.Dispatch("Catia.Application"))
    cizgiYumusatici.show()

    sys.exit(app.exec())
