__author__ = 'PC'

from win32com.client import CDispatch

# from IAktiviteler.IAktivite import IAktivite
from IFikomObject import IFikomObject


class IAktiviteler(IFikomObject):
    def __init__(self, obj:CDispatch, sahip:IFikomObject=None):
        super(IAktiviteler, self).__init__(obj, sahip)
        self.sahip = sahip
        self.tipi = "IAktiviteler"

    # --->Sabit Degiskenler

    @property
    def sayisi(self):
        return self.catNesne.Activities.Count

    def sec(self, SadeceSec=True):
        sahipBulTipiyle= self.sahipBulTipiyle("IProcessDokuman")
        ekle = sahipBulTipiyle.secililer.ekle
        if SadeceSec:
            map(lambda x:ekle(x),self())
            # for x in self():
            #     ekle(x)
        else:
            sahipBulTipiyle.secililer.temizle()
            map(lambda x:ekle(x),self())
            # for x in self():
            #     ekle(x)

    def ekle(self, ActiviteIsmi):
        from IAktiviteler.IAktivite import IAktivite
        return IAktivite(obj=self.catNesne.AppendOperation(ActiviteIsmi, 1), sahip=self)

    def item(self, i) :
        from IAktiviteler.IAktivite import IAktivite
        if type(i) is int:
            i = i + 1
        return IAktivite(obj=self.catNesne.Activities.GetElement(i), sahip=self)

    @property
    def farkliAciVarmi(self) -> bool:
        eskiYon = None

        for x in self():
            if x.turu != "ToolChange":
                if not eskiYon:
                    eskiYon = x.takimYonu()
                else:
                    if eskiYon != x.takimYonu():
                        return True
                        break

        return False


    def __call__(self):
        # rslt = []
        # for akt in range(self.sayisi):
        #     rslt.append(self.item(akt))
        # return rslt
        #-->
        aktSayisi = self.sayisi
        return list(map(lambda x: self.item(x), range(aktSayisi)))

    def __str__(self):
        aktSayisi = self.sayisi
        return repr([self.item(x).ismi for x in range(aktSayisi)])

    def __len__(self) -> int:
        return int(self.sayisi)

    def __getitem__(self, item):
        return self.item(item)