from IBirim import IBirim

__author__ = "PC"

from win32com.client import CDispatch

from IFikomObject import IFikomObject


class IParametre(IFikomObject):
    def __init__(self, obj: CDispatch, sahip: IFikomObject = None):
        super(IParametre, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IParametre"

    # --->Sabit Degiskenler

    @property
    def ismi(self) -> str:
        return self.catNesne.Name

    @ismi.setter
    def ismi(self, value: str):
        self.catNesne.Rename(value)

    @property
    def isimDegismisMi(self) -> bool:
        return self.catNesne.Renamed

    @isimDegismisMi.setter
    def isimDegismisMi(self, value: bool):
        pass

    @property
    def aciklama(self) -> str:
        return self.catNesne.Comment

    @aciklama.setter
    def aciklama(self, value: str):
        self.catNesne.Comment = value

    @property
    def kaynakObje(self):
        return IFikomObject(self.catNesne.Context)

    @property
    def gizli(self) -> bool:
        return self.catNesne.Hidden

    @gizli.setter
    def gizli(self, value: bool):
        self.catNesne.Hidden = value

    @property
    def parametreGercekMi(self) -> bool:
        return self.catNesne.IsTrueParameter

    @parametreGercekMi.setter
    def parametreGercekMi(self, value: bool):
        self.catNesne.IsTrueParameter = value

    @property
    def saltOkunur(self) -> bool:
        return self.catNesne.ReadOnly

    @saltOkunur.setter
    def saltOkunur(self, value: bool):
        pass

    @property
    def kullaniciYetkiModu(self):
        """
        0
            Read only parameter (cannot be destroyed).
        1
            Read/write parameter (cannot be destroyed).
        2
            User parameter (can be read, written and destroyed).
        """

        return self.catNesne.UserAccessMode

    @kullaniciYetkiModu.setter
    def kullaniciYetkiModu(self, value):
        pass

    @property
    def degeriStr(self):
        return self.catNesne.ValueAsString()

    @degeriStr.setter
    def degeriStr(self, value):
        self.catNesne.ValuateFromString(value)

    @property
    def degeri(self):
        return self.catNesne.Value

    @degeri.setter
    def degeri(self, value):
        self.catNesne.Value = value

    @property
    def birim(self):
        return IBirim(obj=self.catNesne.Unit, sahip=self)

    @birim.setter
    def birim(self, value):
        self.catNesne.Unit = value

    def __call__(self, val=None):
        if val == None:
            return self.degeriStr
        else:
            self.degeriStr = val

    def __str__(self):
        return repr(self.ismi + " = " + self.degeriStr)

    def __repr__(self):
        return repr(
            self.ismi
            + " = "
            + self.degeriStr
            + " -> "
            + super(IParametre, self).__repr__()
        )

    def toJson(self):
        return dict(ismi=self.ismi, degeri=self.degeriStr)
