from enum import Enum

from win32com.client import CDispatch

from IFikomObject import IFikomObject
from IMfgOperasyon.IOprBeklemeliDelik import IOprBeklemeliDelik
from IMfgOperasyon.IOprCapDonme import IOprCapDonme
from IMfgOperasyon.IOprDelik import IOprDelik
from IMfgOperasyon.IOprGagalamaliDelik import IOprGagalamaliDelik
from IMfgOperasyon.IOprM3xHardMaterial import IOprM3xHardMaterial
from IMfgOperasyon.IOprPunta import IOprPunta
from IMfgOperasyon.IOprRayba import IOprRayba
from IMfgOperasyon.IOprPPInstruction import IOprPPInstruction


class hizTipi(Enum):
    yok = "None"
    isleme = "Machining"
    yaklasma = "Approach"
    uzaklasma = "Retract"
    hizli = "RAPID"
    lokal = "Local"


class makroTipi(Enum):
    yaklasma = "Approach"
    uzaklasma = "Retract"


class IMfgOperasyon(IFikomObject):
    def __init__(self, obj: CDispatch, sahip: IFikomObject = None):
        super(IMfgOperasyon, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IMfgOperasyon"
        # --->Mirasci Sinif

    @property
    def asDelik(self):
        return IOprDelik(obj=self.catNesne, sahip=self)

    @property
    def asPunta(self):
        return IOprPunta(obj=self.catNesne, sahip=self)

    @property
    def asBeklemeliDelik(self):
        return IOprBeklemeliDelik(obj=self.catNesne, sahip=self)

    @property
    def asGagalamaliDelik(self):
        return IOprGagalamaliDelik(obj=self.catNesne, sahip=self)

    @property
    def asRayba(self):
        return IOprRayba(obj=self.catNesne, sahip=self)

    @property
    def asCapDonme(self):
        return IOprCapDonme(obj=self.catNesne, sahip=self)

    @property
    def asKaba(self):
        return IOprM3xHardMaterial(obj=self.catNesne, sahip=self)

    @property
    def asPPInstruction(self):
        return IOprPPInstruction(obj=self.catNesne, sahip=self)

    @property
    def aciklama(self) -> str:
        return self.catNesne.Comment

    @aciklama.setter
    def aciklama(self, value: str):
        self.catNesne.Comment = value

    def makroEkseneDikMesafeEkle(self, ismi: str, degeri):
        self.catNesne.AddDistanceAlongAxis(ismi, degeri)
