__author__ = 'PC'

from IFikomObject import IFikomObject
from win32com.client import CDispatch, Dispatch


class IGorunumAyarlari(IFikomObject):
    def __init__(self, obj: CDispatch, sahip: IFikomObject = None):
        super(IGorunumAyarlari, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IGorunumAyarlari"

    # --->Sabit Degiskenler

    @property
    def katman(self):
        EvalCode = """
            Dim rslt(1)
            Dim layer
            layer = CLng(0)
            Dim layertype As CatVisLayerType

            Set visProperties1 = VisProperty
            visProperties1.GetLayer layertype, layer
            rslt(0) = layertype
            rslt(1) = layer

            return = rslt
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])
        if rslt[0] == 0:
            return rslt[1]
        else:
            return None

    @katman.setter
    def katman(self, value):
        EvalCode = """
            VisProperty.SetLayer layertype, Katman
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty, Katman", [self.catNesne, value])

    @property
    def secilebilir(self) -> bool:
        EvalCode = """
            dim PickMode
            VisProperty.GetPick PickMode

            return = PickMode
        """
        return not bool(self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne]))

    @secilebilir.setter
    def secilebilir(self, value: bool):
        EvalCode = """
            VisProperty.SetPick PickMode
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty, PickMode", [self.catNesne, int(not value)])

    @property
    def renkRGB(self) -> list:
        EvalCode = """
        	dim RGB(2)
            VisProperty.GetRealColor RGB(0),RGB(1),RGB(2)

            return = RGB
        """
        return self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])

    @renkRGB.setter
    def renkRGB(self, value: list):
        EvalCode = """
            VisProperty.SetRealColor RGB(0),RGB(1),RGB(2),RGB(3)
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty, RGB", [self.catNesne, value])

    @property
    def gorunur(self) -> bool:
        EvalCode = """
            dim PickMode
            VisProperty.GetShow PickMode

            return = PickMode
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])
        return not bool(rslt)

    @gorunur.setter
    def gorunur(self, value: bool):
        EvalCode1 = """
            VisProperty.SetShow Gorunur
        """
        self.anaProgram.eval(EvalCode1, "VisProperty, Gorunur", [self.catNesne, int(not value)])

    @property
    def seffaflik(self):
        EvalCode = """
        	dim Opc
            VisProperty.GetRealOpacity   Opc

            return = Opc
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])
        return rslt

    @seffaflik.setter
    def seffaflik(self, value):
        EvalCode = """
            VisProperty.SetRealOpacity  Opc, inh
        """
        self.anaProgram.eval(EvalCode, "VisProperty, Opc, inh", [self.catNesne, value, 1])

    @property
    def cizgiTipiGercek(self) -> int:
        EvalCode = """
            dim Opc
            VisProperty.GetRealLineType   Opc

            return = Opc
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])
        return rslt

    @cizgiTipiGercek.setter
    def cizgiTipiGercek(self, value: int):
        EvalCode = """
            VisProperty.SetRealLineType  OpLineType, inh
        """
        self.anaProgram.eval(EvalCode, "VisProperty, OpLineType, inh", [self.catNesne, value, 1])

    @property
    def cizgiTipiGenislik(self) -> int:
        EvalCode = """
            dim Opc
            VisProperty.GetRealWidth Opc

            return = Opc
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])
        return rslt

    @cizgiTipiGenislik.setter
    def cizgiTipiGenislik(self, value: int):
        EvalCode = """
            VisProperty.SetRealWidth OpLineType, inh
        """
        self.anaProgram.eval(EvalCode, "VisProperty, OpLineType, inh", [self.catNesne, value, 1])

    @property
    def sembolTipi(self) -> int:
        EvalCode = """
            dim Opc
            VisProperty.GetSymbolType  Opc

            return = Opc
        """
        rslt = self.anaProgram.eval(EvalCode, "VisProperty", [self.catNesne])
        return rslt

    @sembolTipi.setter
    def sembolTipi(self, value: int):
        EvalCode = """
            VisProperty.SetSymbolType OpLineType
        """
        self.anaProgram.eval(EvalCode, "VisProperty, OpLineType", [self.catNesne, value])

    def __call__(self, veri:dict=None) -> dict:
        if not veri:
            rslt = {}
            rslt["katman"] = self.katman
            rslt["secilebilir"] = self.secilebilir
            rslt["renkRGB"] = list(self.renkRGB)
            rslt["gorunur"] = self.gorunur
            rslt["seffaflik"] = self.seffaflik
            rslt["cizgiTipiGercek"] = self.cizgiTipiGercek
            rslt["cizgiTipiGenislik"] = self.cizgiTipiGenislik
            rslt["sembolTipi"] = self.sembolTipi
            return rslt
        else:
            try:
                if veri["katman"]!=None:
                    self.katman = veri["katman"]
            except:
                pass
            try:
                if veri["secilebilir"]!=None:
                    self.secilebilir = veri["secilebilir"]
            except:
                pass
            try:
                if veri["renkRGB"]!=None:
                    tmpListe=veri["renkRGB"]
                    self.renkRGB = [tmpListe[0], tmpListe[1], tmpListe[2], 1]
            except:
                pass
            try:
                if veri["gorunur"]!=None:
                    self.gorunur = veri["gorunur"]
            except:
                pass
            try:
                if veri["seffaflik"]!=None:
                    self.seffaflik = veri["seffaflik"]
            except:
                pass
            try:
                if veri["cizgiTipiGercek"]!=None:
                    self.cizgiTipiGercek = veri["cizgiTipiGercek"]
            except:
                pass
            try:
                if veri["cizgiTipiGenislik"]!=None:
                    self.cizgiTipiGenislik = veri["cizgiTipiGenislik"]
            except:
                pass
            try:
                if veri["sembolTipi"]!=None:
                    self.sembolTipi = veri["sembolTipi"]
            except:
                pass

    def __str__(self) -> str:
        return repr([str(self.__call__())])
