import inspect
import os
import sys

import pythoncom
import win32com.client
from PyQt6.QtCore import QMimeData
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 IFikoMfgParametreDegistirici(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(IFikoMfgParametreDegistirici, 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)

        for sec in self.__dokuman.secililer():
            self.listeItemEkle(sec.nesne.ismi, [sec.nesne,sec.nesne.parametreler()],)

    def show(self):
        # print(self.__partDokuman.secililer.sec3(["HybridShapeCurveSmooth"],"Çizgi Seç",True))
        super(IFikoMfgParametreDegistirici, self).show()

    def closeEvent(self, *args, **kwargs):
        super(IFikoMfgParametreDegistirici, 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 Aktiviteleri Seçiniz"
            durum = self.__dokuman.secililer.sec3(["ManufacturingOperation", "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,catSecililer.item2(x).nesne.parametreler()])
                self.setVisible(True)
            else:
                self.setVisible(True)
                self.__fikatia.durumCubugu = "Aktivite 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(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()
        #--->
        for scl in veri[1]:
            isim=scl.ismi
            sonHane= str(isim).split("\\")[len(str(isim).split("\\"))-1]
            # tumListe=self.comboParametreler.findItems("*", Qt.MatchWrap | Qt.MatchWildcard)
            if not self.comboParametreler.findText(sonHane, Qt.MatchFlag.MatchFixedString)>= 0:
                self.comboParametreler.addItem(sonHane)

    @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))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    fikoMfgParam = IFikoMfgParametreDegistirici(Catia=win32com.client.Dispatch("Catia.Application"))
    fikoMfgParam.show()

    sys.exit(app.exec())
