from IFikoAcilar.IFikoAcilar import IFikoAcilar
from IFikomObject import IFikomObject
import os
import inspect
from IMfgTakim.IMfgTakim import IMfgTakim, TakimTurleri
from IYardimciSiniflar import XYZ


class IKacmaSonuc(object):
    takim = IMfgTakim
    hata = bool(False)
    hataStr = str
    degerler = XYZ()

    def __str__(self):
        return repr(
            {"takim": str(self.takim), "hata": self.hata, "hataStr": self.hataStr, "degerler": str(self.degerler)})


class IKacmaDegerleri(IFikomObject):
    def __init__(self, obj, sahip:IFikoAcilar=None):
        super(IKacmaDegerleri, self).__init__(obj, sahip)
        self.tipi = "IKacmaDegerleri"
        # self.ismi = "IKacmaDegerleri"
        # --->
        self.__aktivite = sahip.aktivite
        self.__saltAcilar = sahip.saltAcilar
        self.__sonuc = IKacmaSonuc
        self.__desteklenenTakimlar = [TakimTurleri.Normal, TakimTurleri.Yuzey]
        # --->
        self.__dosya = os.path.realpath(os.path.join(self.anaProgram.scriptYolu, "Prg", "FikoDosya"))

    @property
    def sahip(self) -> IFikoAcilar:
        return self.sahip

    @sahip.setter
    def sahip(self, value:IFikoAcilar):
        self.sahip = value

    @property
    def takim(self):
        self.__sonuc = IKacmaSonuc()
        try:
            self.__sonuc.takim = self.__aktivite.takim
        except:
            self.__sonuc.hata = True
            self.__sonuc.hataStr = "Takım Tanıtılmamış"
            return self.__sonuc

        if not self.__sonuc.takim.turu in self.__desteklenenTakimlar:
            self.__sonuc.hata = True
            self.__sonuc.hataStr = "Takım Desteklenmiyor"
            return self.__sonuc

        return self.__sonuc

    @property
    def kacmaDegerleri(self) -> IKacmaSonuc:
        __takim = self.takim

        if __takim.hata:
            return self.__sonuc
        self.anaProgram.dosyaUyarilariniGoster = False

        dok = self.__aktivite.anaProgram.dokumanlar.oku(
            os.path.join(self.__dosya, __takim.takim.turu.value + ".FikoDll"))
        part = dok.asPartDokuman.part
        parametreler = part.parametreler

        parametreler.item(u"Ust").degeri = self.__saltAcilar.ustAci
        parametreler.item(u"Alt").degeri = self.__saltAcilar.altAci
        parametreler.item(u"TakimCapi").degeri = __takim.takim.disCapi.degeri
        parametreler.item(u"TakimRadius").degeri = __takim.takim.radius.degeri

        parametreler.item(u"TakimRadiuslu").degeri = bool(__takim.takim.radius.degeri)

        part.guncelle()

        self.__sonuc.degerler.X = parametreler.item(u"KacmaX").degeri
        self.__sonuc.degerler.Y =  parametreler.item(u"KacmaY").degeri
        self.__sonuc.degerler.Z =  parametreler.item(u"KacmaZ").degeri * -1

        dok.kapat()
        self.anaProgram.dosyaUyarilariniGoster = True
        return self.__sonuc

    @staticmethod
    def kacmaDegeleri(ustAci=0.0, altAci=0.0, takimCapi=32, takimRadiusu=0):
        """ Bagimsiz Kacma Degeri Bulucu """
        pass

    def __call__(self):
        return {"Kacma": self.kacmaDegerleri, "Takim": self.takim}

    def __str__(self):
        return repr({"Kacma": self.kacmaDegerleri, "Takim": self.takim})