from win32com.client import CDispatch
from IFikomObject import IFikomObject
from IProduct import IProduct
from IYardimciSiniflar import XYZ


class IMakineIslemeEkseni(IFikomObject):
    def __init__(self, obj:CDispatch, sahip:IFikomObject=None):
        """Constructor for IPartOperasyonu"""
        super(IMakineIslemeEkseni, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IMakineIslemeEkseni"

    @property
    def ismi(self)->str:
        return self.catNesne.Name

    @ismi.setter
    def ismi(self, value:str):
        self.catNesne.Name = value

    @property
    def merkez(self):
        evalCode = """
			Dim dirc(2) As Double
			MachiningAxisSystem.GetOriginPoint dirc(0), dirc(1), dirc(2)
			return = dirc
		"""
        rslt = self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object", [self.catNesne])
        return XYZ(X=rslt[0], Y=rslt[1], Z=rslt[2])

    @merkez.setter
    def merkez(self, value:XYZ):
        evalCode = """
			MachiningAxisSystem.SetOriginPointByCoordinates O1, O2, O3
		"""
        self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object, O1,O2,O3", [self.catNesne, value.X, value.Y, value.Z])

    @property
    def x(self):
        evalCode = """
			Dim dirc(2) As Double
			MachiningAxisSystem.GetOriginXDirection dirc(0), dirc(1), dirc(2)
			return = dirc
		"""
        rslt = self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object", [self.catNesne])
        return XYZ(X=rslt[0], Y=rslt[1], Z=rslt[2])

    @x.setter
    def x(self, value):
        evalCode = """
			MachiningAxisSystem.SetOriginXDirection P1, P2, P3
		"""
        self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object, P1,P2,P3", [self.catNesne, value.X, value.Y, value.Z])

    @property
    def y(self):
        evalCode = """
			Dim dirc(2) As Double
			MachiningAxisSystem.GetOriginYDirection dirc(0), dirc(1), dirc(2)
			return = dirc
		"""
        rslt = self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object", [self.catNesne])
        return XYZ(X=rslt[0], Y=rslt[1], Z=rslt[2])

    @y.setter
    def y(self, value):
        """ Y Yönü Tayin Edilemiyor """
        pass
        evalCode = """
			MachiningAxisSystem.SetOriginYDirection P1, P2, P3
		"""
        self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object, P1,P2,P3", [self.catNesne, value.X, value.Y, value.Z])

    @property
    def z(self):
        evalCode = """
			Dim dirc(2) As Double
			MachiningAxisSystem.GetOriginZDirection dirc(0), dirc(1), dirc(2)
			return = dirc
		"""
        rslt = self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object", [self.catNesne])
        return XYZ(X=rslt[0], Y=rslt[1], Z=rslt[2])

    @z.setter
    def z(self, value):
        evalCode = """
			MachiningAxisSystem.SetOriginZDirection P1, P2, P3
		"""
        self.anaProgram.eval(evalCode, "MachiningAxisSystem As Object, P1,P2,P3", [self.catNesne, value.X, value.Y, value.Z])

    def eksenSec(self, eksen:IFikomObject, product:IProduct):
        self.catNesne.SetPartAxisSystem(eksen.catNesne, product.catNesne)

    def __str__(self, *args, **kwargs):
        return repr(self.ismi)