from win32com.client import CDispatch
from IFikomObject import IFikomObject

__author__ = 'CAM'

import os
import inspect


class IKacmaDegerleri(object):
    def __init__(self, Aktv):
        if Aktv.tipi != "IAktivite":
            self.Aktivite = Aktv.sahip
        else:
            self.Aktivite = Aktv

    @property
    def takim(self):
        Aktivite = self.Aktivite
        Hata = False
        rslt = {}
        try:
            TakimTipi = Aktivite.catNesne.Tool.ToolType
        except:
            TakimTipi = u"Takim Tanitilmamis"
            rslt[u"TakimTipi Tipi"] = u"Takim Tanitilmamis"
            rslt[u"TakimCapi"] = 0
            rslt[u"TakimRadiusu"] = 0
            rslt[u"Hata"] = True
            Hata = True
        if Hata:
            return rslt

        Takim = Aktivite.catNesne.Tool
        if TakimTipi == u"MfgEndMillTool":
            TakimCapi = float(
                str(Takim.GetAttribute("MFG_NOMINAL_DIAM").ValueAsString()).replace("mm", "").replace(",", "."))
            TakimRadiusu = float(
                str(Takim.GetAttribute("MFG_CORNER_RAD").ValueAsString()).replace("mm", "").replace(",", "."))
            rslt[u"TakimCapi"] = TakimCapi
            rslt[u"TakimRadiusu"] = TakimRadiusu
            rslt[u"TakimTipi"] = TakimTipi
            rslt[u"Hata"] = False
        else:
            TakimCapi = 0
            TakimRadiusu = 0
            rslt[u"TakimCapi"] = TakimCapi
            rslt[u"TakimRadiusu"] = TakimRadiusu
            rslt[u"TakimTipi"] = u"Takim Desteklenmiyor"
            rslt[u"Hata"] = True
            # --->
        return rslt

    @property
    def kacmaDegerleri(self):
        ScriptYolu = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
        TempDsya = os.path.realpath(ScriptYolu + u"\\..\\Prg\\FikoDosya\\KCMEndMill.FikoDll")

        Takim = self.takim
        # --->

        if Takim["Hata"]:
            return {"X": 0, "Y": 0, "Z": 0}
        # --->
        self.doc = self.Aktivite.anaProgram.dokumanlar.oku(TempDsya)
        part = self.doc.asPartDokuman.catNesne
        params = part.part.Parameters

        #--->
        tavUst = params.Item(u"Ust")
        tavAlt = params.Item(u"Alt")
        #--->
        tavTakimCapi = params.Item("TakimCapi")
        TavTakimRadius = params.Item("TakimRadius")
        #--->
        Acilar = self.Aktivite.acilar.tav20Er32
        tavUst.Value = float(Acilar.ustAci)
        tavAlt.Value = float(Acilar.altAci)
        tavTakimCapi.Value = float(Takim["TakimCapi"])
        TavTakimRadius.Value = float(Takim["TakimRadiusu"])

        if Takim["TakimRadiusu"] == 0:
            params.Item("TakimRadiuslu").Value = False
        else:
            params.Item("TakimRadiuslu").Value = True

        part.part.update()

        KacmaX = params.Item(u"KacmaX").value
        KacmaY = params.Item(u"KacmaY").value
        KacmaZ = params.Item(u"KacmaZ").value * -1

        self.doc.kapat()

        return {"X": KacmaX, "Y": KacmaY, "Z": KacmaZ}

    def __call__(self):
        return {"Kacma": self.kacmaDegerleri, "Takim": self.takim}

    def __str__(self):
        return repr({"Kacma": self.kacmaDegerleri, "Takim": self.takim})

    def __dict__(self):
        return self.kacmaDegerleri