from win32com.client import CDispatch

from IFikomObject import IFikomObject
from IMfgOperasyon.IOprYardimciSiniflar import *
from IMfgTakim import IMfgTakim
from IParametre import IParametre


class IAktivite: pass


class IOprDelik(IFikomObject):
    def __init__(self, obj:CDispatch, sahip:IFikomObject=None):
        super(IOprDelik, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IOprDelik"
        self.__aktivite = IAktivite.IAktivite(obj=self.catNesne, sahip=self.sahip.sahip)

    @property
    def takim(self) -> IMfgTakim:
        if isinstance(self.sahip.sahip, IAktivite.IAktivite):
            return self.sahip.sahip.takim
        elif isinstance(self.sahip, IAktivite.IAktivite):
            return self.sahip.takim
        else:
            raise Exception(
                """Aktivite Hatası.Bu Hata Sınıfın Tek Başına Yaratılıp Sahip Olarak Aktivite Verilmezse Ortaya Çıkar""")

    @property
    def baslamaNoktasi(self) -> IParametre:
        """ Approach Distance """
        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 derinlikModu(self):
        """ depth mode  MfgDepthShoulder <-> MfgDepthTip"""
        rslt = self.catNesne.GetAttribute("MFG_DEPTH_MODE").ValueAsString()
        if rslt == "MfgDepthTip":
            cvr = DerinlikTipi.ucaGore
        else:
            cvr = DerinlikTipi.kesmeYerineGore
        return cvr

    @derinlikModu.setter
    def derinlikModu(self, value):
        if isinstance(value, str):
            self.catNesne.GetAttribute("MFG_DEPTH_MODE").ValuateFromString(value)
        elif isinstance(value, DerinlikTipi):
            if value == DerinlikTipi.ucaGore:
                self.catNesne.GetAttribute("MFG_DEPTH_MODE").ValuateFromString("MfgDepthTip")
            else:
                self.catNesne.GetAttribute("MFG_DEPTH_MODE").ValuateFromString("MfgDepthShoulder")
        elif isinstance(value, int):
            if value == 0:
                self.catNesne.GetAttribute("MFG_DEPTH_MODE").ValuateFromString("MfgDepthTip")
            else:
                self.catNesne.GetAttribute("MFG_DEPTH_MODE").ValuateFromString("MfgDepthShoulder")

    @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
        else:
            cvr = NoktalamaTipi.capaGore
        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")
            else:
                self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString("MfgPlungeDiameter")
        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")
            else:
                self.catNesne.GetAttribute("MFG_PLUNGE_MODE").ValuateFromString("MfgPlungeDiameter")

    @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 noktalamaCapi(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MFG_PLUNGE_DIAMETER"), self.__aktivite.parametreler)

    @noktalamaCapi.setter
    def noktalamaCapi(self, value):
        self.noktalamaCapi.degeri = value

    @property
    def aciKodlari(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MFG_ROTABL_OUTPUT"), self.__aktivite.parametreler)

    @aciKodlari.setter
    def aciKodlari(self, value):
        self.aciKodlari.degeri = value

    @property
    def cevrimKodlari(self) -> IParametre:
        """ Approach Distance """
        return IParametre(self.catNesne.GetAttribute("MFG_CYCLE_OUTPUT"), self.__aktivite.parametreler)

    @cevrimKodlari.setter
    def cevrimKodlari(self, value:bool):
        self.cevrimKodlari.degeri = 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 yaklasmaHiziG0(self) -> IParametre:
        return self.__aktivite.parametreler["Rapid approach feedrate"]

    @yaklasmaHiziG0.setter
    def yaklasmaHiziG0(self, value:bool):
        self.yaklasmaHiziG0.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 uzaklasmaHizi(self) -> IParametre:
        return self.__aktivite.parametreler["Retract feedrate"]

    @uzaklasmaHizi.setter
    def uzaklasmaHizi(self, value:float):
        self.uzaklasmaHizi.degeri = value

    @property
    def uzaklasmaHiziG0(self) -> IParametre:
        return self.__aktivite.parametreler["Rapid retract feedrate"]

    @uzaklasmaHiziG0.setter
    def uzaklasmaHiziG0(self, value:bool):
        self.uzaklasmaHiziG0.degeri = value

    @property
    def gecisHiziModuAktif(self) -> IParametre:
        return self.__aktivite.parametreler["MFG_FEED_SELECT_TRANSITION"]

    @gecisHiziModuAktif.setter
    def gecisHiziModuAktif(self, value:bool):
        self.uzaklasmaHiziG0.degeri = value

    @property
    def gecisHiziModu(self) -> IParametre:
        return self.__aktivite.parametreler["MFG_FEED_TYPE_TRANSITION"]

    @gecisHiziModu.setter
    def gecisHiziModu(self, value:str):
        self.gecisHiziModu.degeriStr = value

    @property
    def gecisHiziLokal(self) -> IParametre:
        return self.__aktivite.parametreler["MFG_LOCAL_FEED_TRANSITION_VALUE"]

    @gecisHiziLokal.setter
    def gecisHiziLokal(self, value:float):
        self.gecisHiziLokal.degeri = value

    @property
    def hizBirimi(self) -> IParametre:
        return self.__aktivite.parametreler["Feedrate unit"]

    @hizBirimi.setter
    def hizBirimi(self, value:str):
        self.hizBirimi.degeriStr = 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 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 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


from IAktiviteler import IAktivite