﻿import inspect
import os
import sys
from os.path import join

import win32com.client
from PyQt6.QtCore import pyqtProperty
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 IDokuman import IDokuman
from IProcessDokuman import IProcessDokuman
from IProgram import IProgram
from IAktiviteler import IAktivite
from IDialoglar.IFikoDokumantasyon.threadManager import Async
import time

global iptal
iptal = False


class IFikoRsmToPart(QMainWindow):
    sinyal = pyqtSignal(str, QVariant)

    def __init__(self, parent=None, flags=0, Catia=None, app = QApplication([sys.argv])):
        self.__fikatia = IFikatia(obj=Catia)
        self.__dokuman = self.__fikatia.aktifDokuman
        self.app = app

        super(IFikoRsmToPart, self).__init__()

        self.ScriptYolu = os.path.dirname(os.path.abspath(
            inspect.getfile(inspect.currentframe())))
        self.ui = loadUi(self.ScriptYolu + r'\\formAna.ui', self)
        self.app.setStyle("fusion")
        self.setWindowFlags(Qt.WindowType.Window | Qt.WindowType.WindowCloseButtonHint | Qt.WindowType.CustomizeWindowHint | Qt.WindowType.WindowStaysOnTopHint)

        # AÇIKLAMA Logo Animasyon
        # lbl = self.ui.labelResimProfil
        # movie = QMovie(os.path.join(self.ScriptYolu, "Resimler", "kutuk.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 İndicatör Animasyon
        lbl = self.ui.labelMesgulLogo
        movie = QMovie(join(self.ScriptYolu, "Resimler", "load1.gif"))
        lbl.setMovie(movie)
        lbl.show()
        movie.start()

        self.sinyal.connect(self.sinyalGeldi)

        # --->
        self.__resimYolu: str = None
        self.__hassasiyet: float = 0.1
        self.__orjinaliKoru: bool = True
        self.__genislik: int = 640
        self.__yukseklik: int = 480

    @pyqtProperty(str)
    def resimYolu(self) -> str:
        return self.__resimYolu

    @resimYolu.setter
    def resimYolu(self, value: str):
        self.__resimYolu = value

    @pyqtProperty(float)
    def hassasiyet(self) -> float:
        return self.__hassasiyet

    @hassasiyet.setter
    def hassasiyet(self, value: float):
        self.__hassasiyet = value

    @pyqtProperty(bool)
    def orjinaliKoru(self) -> bool:
        return self.__orjinaliKoru

    @orjinaliKoru.setter
    def orjinaliKoru(self, value: bool):
        self.__orjinaliKoru = value

    @pyqtProperty(int)
    def rsmGenislik(self) -> int:
        return self.__genislik

    @rsmGenislik.setter
    def rsmGenislik(self, value: int):
        self.__genislik = value

    @pyqtProperty(int)
    def rsmYukseklik(self) -> int:
        return self.__yukseklik

    @rsmYukseklik.setter
    def rsmYukseklik(self, value: int):
        self.__yukseklik = value

    def sinyalGeldi(self, ismi, params=None):
        global iptal
        if ismi == "uyariGoster":
            # self.ui.stackedWidget.setCurrentIndex(1)
            self.ui.progressMesgul.setMaximum(
                self.ui.progressMesgul.maximum() if not "max" in params else params["max"])
            self.ui.progressMesgul.setValue(
                self.ui.progressMesgul.value() if not "value" in params else params["value"])
            self.ui.labelMesgul.setText(self.ui.labelMesgul.text() if not "mesaj" in params else params["mesaj"])
        if ismi == "Tamamlandı":
            self.ui.stackedWidget.setCurrentIndex(0)
            iptal = False

    def show(self):
        super(IFikoRsmToPart, self).show()

    def closeEvent(self, *args, **kwargs):
        super(IFikoRsmToPart, self).closeEvent(*args, **kwargs)

    @pyqtSlot()
    def on_btnCikis_clicked(self):
        self.close()

    @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_btnBasla_clicked(self):
        @Async()
        def basla(dokuman, offsetler, seciliAktivite, sinyal=self.sinyal):
            global iptal
            pass

        # --->
        basla(self.__dokuman.asProcessDokuman)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    prflPrg = IFikoRsmToPart(Catia=win32com.client.Dispatch("Catia.Application"))
    prflPrg.show()

    sys.exit(app.exec())
