from win32com.client import CDispatch

from IFikomObject import IFikomObject
from IMfgOperasyon.IOprYardimciSiniflar import *
from IParametre import IParametre


class IAktivite: pass


class IOprCapDonme(IFikomObject):
    def __init__(self, obj:CDispatch, sahip:IFikomObject=None):
        super(IOprCapDonme, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IOprCapDonme"
        self.__aktivite = IAktivite.IAktivite(obj=self.catNesne, sahip=self.sahip.sahip)

    @property
    def baslamaNoktasi(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MFG_CLEAR_TIP"), self.__aktivite.parametreler)

    @baslamaNoktasi.setter
    def baslamaNoktasi(self, value):
        self.catNesne.GetAttribute("MFG_CLEAR_TIP").value = value

    @property
    def noktalamaModu(self):
        """ depth mode  MfgPlungeDefault <-> MfgPlungeTip <-> MfgPlungeDiameter"""
        rslt = self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValueAsString()
        if rslt == "MfgPlungeDefault":
            cvr = NoktalamaTipi.yok
        elif rslt == "MfgPlungeTip":
            cvr = NoktalamaTipi.ucaGore
        return cvr

    @noktalamaModu.setter
    def noktalamaModu(self, value):
        if isinstance(value, str):
            self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString(value)
        elif isinstance(value, NoktalamaTipi):
            if value == NoktalamaTipi.yok:
                self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString("MfgPlungeDefault")
            elif value == NoktalamaTipi.ucaGore:
                self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString("MfgPlungeTip")
        elif isinstance(value, int):
            if value == 0:
                self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString("MfgPlungeDefault")
            elif value == 1:
                self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString("MfgPlungeTip")

    @property
    def noktalamaMiktari(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MFG_PLUNGE_TIP"), self.__aktivite.parametreler)

    @noktalamaMiktari.setter
    def noktalamaMiktari(self, value):
        self.noktalamaMiktari.degeri = value

    @property
    def noktalamaOffset(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MFG_PLUNGE_OFFST"), self.__aktivite.parametreler)

    @noktalamaOffset.setter
    def noktalamaOffset(self, value):
        self.noktalamaOffset.degeri = value

    @property
    def islemeToleransi(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MfgMachiningTolerance"), self.__aktivite.parametreler)

    @islemeToleransi.setter
    def islemeToleransi(self, value):
        self.catNesne.islemeToleransi("MfgMachiningTolerance").value = value

    @property
    def kesmeYonu(self):
        """ depth mode  MfgDepthShoulder <-> MfgDepthTip"""
        rslt = self.catNesne.GetAttribute("MfgDirectionOfCut").ValueAsString()
        print(rslt)
        if rslt == "MfgClimb":
            cvr = KesmeYonu.tirmanma
        else:
            cvr = KesmeYonu.konvensiyonel
        return cvr

    @kesmeYonu.setter
    def kesmeYonu(self, value):
        if isinstance(value, str):
            self.catNesne.GetAttribute("MfgDirectionOfCut").ValuateFromString(value)
        elif isinstance(value, KesmeYonu):
            if value == KesmeYonu.tirmanma:
                self.catNesne.GetAttribute("MfgDirectionOfCut").ValuateFromString("MfgClimb")
            else:
                self.catNesne.GetAttribute("MfgDirectionOfCut").ValuateFromString("MfgConventional")
        elif isinstance(value, int):
            if value == 0:
                self.catNesne.GetAttribute("MfgDirectionOfCut").ValuateFromString("MfgClimb")
            else:
                self.catNesne.GetAttribute("MfgDirectionOfCut").ValuateFromString("MfgConventional")


    @property
    def takimIslemeYuzdesi(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MfgOverhang"), self.__aktivite.parametreler)

    @takimIslemeYuzdesi.setter
    def takimIslemeYuzdesi(self, value):
        self.noktalamaOffset.degeri = value

    @property
    def capDonmeTipi(self):
        rslt = self.catNesne.GetAttribute("MfgCircularMillingMode").ValueAsString()
        print(rslt)
        if rslt == "MfgCircularMillingHelical":
            cvr = CapDonmeTipi.helisel
        else:
            cvr = CapDonmeTipi.standart
        return cvr

    @capDonmeTipi.setter
    def capDonmeTipi(self, value):
        if isinstance(value, str):
            self.catNesne.GetAttribute("MfgCircularMillingMode").ValuateFromString(value)
        elif isinstance(value, CapDonmeTipi):
            if value == CapDonmeTipi.helisel:
                self.catNesne.GetAttribute("MfgCircularMillingMode").ValuateFromString("MfgCircularMillingHelical")
            else:
                self.catNesne.GetAttribute("MfgCircularMillingMode").ValuateFromString("MfgCircularMillingStandard")
        elif isinstance(value, int):
            if value == 0:
                self.catNesne.GetAttribute("MfgCircularMillingMode").ValuateFromString("MfgCircularMillingHelical")
            else:
                self.catNesne.GetAttribute("MfgCircularMillingMode").ValuateFromString("MfgCircularMillingStandard")

    @property
    def yanalAdim(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MfgDistanceBetweenPaths"), self.__aktivite.parametreler)

    @yanalAdim.setter
    def yanalAdim(self, value):
        self.yanalAdim.degeri = value

    @property
    def yanalAdimTekrari(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MfgNumberOfRadialPaths"), self.__aktivite.parametreler)

    @yanalAdimTekrari.setter
    def yanalAdimTekrari(self, value):
        self.yanalAdimTekrari.degeri = value



    @property
    def talasVermeModu(self):
        rslt = self.catNesne.GetAttribute("MfgAxialStrategy").ValueAsString()
        print(rslt)
        if rslt == "MfgMaxDepthOfCut":
            cvr = TalasVermeModu.talasMiktarinaGore
        elif rslt == "MfgNumberOfLevels":
            cvr = TalasVermeModu.tekrarSayisinaGore
        else:
            cvr = TalasVermeModu.ustOlmadanTekrarSayisinaGore
        return cvr

    @talasVermeModu.setter
    def talasVermeModu(self, value):
        func = self.catNesne.GetAttribute("MfgAxialStrategy").ValuateFromString
        if isinstance(value, str):
            func(value)
        elif isinstance(value, TalasVermeModu):
            if value == TalasVermeModu.talasMiktarinaGore:
                func("MfgMaxDepthOfCut")
            elif value == TalasVermeModu.tekrarSayisinaGore:
                func("MfgNumberOfLevels")
            else:
                func("MfgNumberOfLevelsNoTop")
        elif isinstance(value, int):
            if value == 0:
                func("MfgCircularMillingHelical")
            elif value == 1:
                func("MfgNumberOfLevels")
            else:
                func("MfgNumberOfLevelsNoTop")

    @property
    def talasMiktari(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MfgMaxDepthOfCut"), self.__aktivite.parametreler)

    @talasMiktari.setter
    def talasMiktari(self, value):
        self.talasMiktari.degeri = value

    @property
    def talasTekrari(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MfgNumberOfLevels"), self.__aktivite.parametreler)

    @talasTekrari.setter
    def talasTekrari(self, value):
        self.talasTekrari.degeri = value

    @property
    def islemSirasiModu(self):
        rslt = self.catNesne.GetAttribute("MfgSequencing").ValueAsString()
        print(rslt)
        if rslt == "MfgRadialFirst":
            cvr = IslemSirasiModu.ilkYatay
        elif rslt == "MfgAxialFirst":
            cvr = IslemSirasiModu.ilkDikey
        return cvr

    @islemSirasiModu.setter
    def islemSirasiModu(self, value):
        func = self.catNesne.GetAttribute("MfgSequencing").ValuateFromString
        if isinstance(value, str):
            func(value)
        elif isinstance(value, IslemSirasiModu):
            if value == IslemSirasiModu.ilkYatay:
                func("MfgRadialFirst")
            elif value == IslemSirasiModu.ilkDikey:
                func("MfgAxialFirst")
        elif isinstance(value, int):
            if value == 0:
                func("MfgRadialFirst")
            elif value == 1:
                func("MfgAxialFirst")

    @property
    def koniklikAcisi(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MfgAutoDraftAngle"), self.__aktivite.parametreler)

    @koniklikAcisi.setter
    def koniklikAcisi(self, value):
        self.koniklikAcisi.degeri = value

    @property
    def yayHareketi(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MFG_SPR_PATH"), self.__aktivite.parametreler)

    @yayHareketi.setter
    def yayHareketi(self, value):
        self.yayHareketi.degeri = value

    @property
    def delikSiralamasiTersCevir(self) -> IParametre:
        return self.__aktivite.parametreler["Inverse pattern ordering"]

    @delikSiralamasiTersCevir.setter
    def delikSiralamasiTersCevir(self, value):
        self.delikSiralamasiTersCevir.degeri = value

    @property
    def delikMerkeziYenidenLimitle(self) -> IParametre:
        return self.__aktivite.parametreler["Relimit hole origin"]

    @delikMerkeziYenidenLimitle.setter
    def delikMerkeziYenidenLimitle(self, value):
        self.delikMerkeziYenidenLimitle.degeri = value

    @property
    def farkliDerinlikleriDikkateAl(self) -> IParametre:
        return self.__aktivite.parametreler["Machine different depths"]

    @farkliDerinlikleriDikkateAl.setter
    def farkliDerinlikleriDikkateAl(self, value):
        self.farkliDerinlikleriDikkateAl.degeri = value

    @property
    def korDerinlikleriDikkateAl(self) -> IParametre:
        return self.__aktivite.parametreler["Machine blind/through holes"]

    @korDerinlikleriDikkateAl.setter
    def korDerinlikleriDikkateAl(self, value):
        self.korDerinlikleriDikkateAl.degeri = value

    @property
    def farkliCaplariDikkateAl(self) -> IParametre:
        return IParametre(self.catNesne.GetAttribute("MFG_MACHINE_DIFFERENT_DIAMETERS"), self.__aktivite.parametreler)
        # return self.__aktivite.parametreler["MFG_MACHINE_DIFFERENT_DIAMETERS"]

    @farkliCaplariDikkateAl.setter
    def farkliCaplariDikkateAl(self, value):
        self.farkliCaplariDikkateAl.degeri = value

    @property
    def devirOtomatikAktif(self) -> IParametre:
        return self.__aktivite.parametreler["Automatic compute from tooling Feeds and Speeds"]

    @devirOtomatikAktif.setter
    def devirOtomatikAktif(self, value:bool):
        self.devirOtomatikAktif.degeri = value

    @property
    def devirAktif(self) -> IParametre:
        return self.__aktivite.parametreler["Spindle output"]

    @devirAktif.setter
    def devirAktif(self, value:bool):
        self.devirAktif.degeri = value

    @property
    def devirSayisi(self) -> IParametre:
        return self.__aktivite.parametreler["Machining spindle"]

    @devirSayisi.setter
    def devirSayisi(self, value:float):
        self.devirSayisi.degeri = value

    @property
    def devirBirimi(self) -> IParametre:
        return self.__aktivite.parametreler["Spindle unit"]

    @devirBirimi.setter
    def devirBirimi(self, value:str):
        self.devirBirimi.degeriStr = value

    @property
    def yaklasmaHizi(self) -> IParametre:
        return self.__aktivite.parametreler["Approach feedrate"]

    @yaklasmaHizi.setter
    def yaklasmaHizi(self, value:float):
        self.yaklasmaHizi.degeri = value

    @property
    def gagalamaHizi(self) -> IParametre:
        return self.__aktivite.parametreler["Plunge feedrate"]

    @gagalamaHizi.setter
    def gagalamaHizi(self, value:IParametre):
        self.gagalamaHizi.degeri = value

    @property
    def gagalamaHiziG0(self) -> IParametre:
        return self.__aktivite.parametreler["Rapid plunge feedrate"]

    @gagalamaHiziG0.setter
    def gagalamaHiziG0(self, value:bool):
        self.gagalamaHiziG0.degeri = value

    @property
    def islemeHizi(self) -> IParametre:
        return self.__aktivite.parametreler["Machining feedrate"]

    @islemeHizi.setter
    def islemeHizi(self, value:float):
        self.islemeHizi.degeri = value

    @property
    def hizOtomatikAktif(self) -> IParametre:
        return self.__aktivite.parametreler["Automatic compute from tooling Feeds and Speeds"]

    @hizOtomatikAktif.setter
    def hizOtomatikAktif(self, value:bool):
        self.hizOtomatikAktif.degeri = value

    @property
    def uzaklasmaHizi(self) -> IParametre:
        return self.__aktivite.parametreler["Retract feedrate"]

    @uzaklasmaHizi.setter
    def uzaklasmaHizi(self, value:float):
        self.uzaklasmaHizi.degeri = value


from IAktiviteler import IAktivite