import inspect
import os
import sqlite3

from IFikoSistem.IFikoAyar import IFikoAyar
from IFikoSistem.IFikoAyarKategoriler import IFikoAyarKategoriler
from IFikomObject import IFikoObject


def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d


class IFikoAyarlar(IFikoObject):
    def __init__(self, sahip=None):
        super(IFikoAyarlar, self).__init__(sahip)
        self.sahip = sahip
        self.anaProgram = sahip.anaProgram if sahip is not None else None
        # --->
        self.__scriptYolu = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
        self.__baglanti = sqlite3.connect(os.path.join(self.__scriptYolu, 'db', 'FikoSistem'))
        self.__baglanti.row_factory = dict_factory
        self.__cursor = self.__baglanti.cursor()
        self.__cursor.execute("SELECT * FROM ayarlar")
        # --->
        self.itemler = self.__cursor.fetchall()
        self.__kategoriler = IFikoAyarKategoriler(self)

    @property
    def sayisi(self) -> int:
        return len(self.itemler)

    @property
    def kategoriler(self) -> IFikoAyarKategoriler:
        return self.__kategoriler

    def item(self, item) -> IFikoAyar:
        if isinstance(item, int):
            return IFikoAyar(sahip=self, bilgiler=self.itemler[item])
        elif isinstance(item, str):
            for x in self.itemler:
                if IFikoAyar(bilgiler=x).strID == item:
                    return IFikoAyar(bilgiler=x)
            return None

    def __getitem__(self, item) -> IFikoAyar:
        return self.item(item)