import datetime
import os
import sqlite3
import subprocess



def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d


class IBehemilDB():
    def __init__(self, processKlasoru:str, processIsmi:str):
        # super(IBehemilDB, self).__init__(processKlasoru,processIsmi)
        # --->
        self.__dbKlasoru = processKlasoru
        self.__processIsmi = processIsmi
        self.__baglanti = None
        # --->
        self.aptler = []

    @property
    def dbKlasoru(self) -> str:
        return self.__dbKlasoru

    @dbKlasoru.setter
    def dbKlasoru(self, value: str):
        self.__dbKlasoru = value

    @property
    def baglanti(self) -> str:
        return self.__baglanti

    @baglanti.setter
    def baglanti(self, value: str):
        self.__baglanti = value

    def veriTabaniYarat(self):
        dsyaIsmi = self.__processIsmi+"[" + datetime.date.strftime(datetime.datetime.now(),
                                                        "%d.%m.%Y") + "-" + datetime.date.strftime(
            datetime.datetime.now(), "%H.%M.%S") + "].fikoPostVT"
        self.__baglanti = sqlite3.connect(os.path.join(self.dbKlasoru, dsyaIsmi))
        self.__baglanti.execute("""CREATE TABLE POSTLAR
                          (
                              _id INTEGER PRIMARY KEY AUTOINCREMENT,
                              ISMI TEXT,
                              ACIKLAMA TEXT,
                              KOD BLOB,
                              EK_BILGILER BLOB,
                              RESIM BLOB,
                              saat DATETIME
                            );
                          """)
        return os.path.join(self.dbKlasoru,dsyaIsmi)

    def veriEkle(self, ismi=None, aciklama=None, kod=None, ekBilgiler=None):
        self.__baglanti.execute("""
            INSERT INTO POSTLAR (ISMI, ACIKLAMA, KOD, EK_BILGILER, saat) VALUES (:ismi, :aciklama, :kod, :ekBilgiler, :saat);
            """, {"ismi":ismi ,"aciklama":aciklama, "kod":sqlite3.Binary(kod), "ekBilgiler": ekBilgiler, "saat": datetime.datetime.now()})
        self.__baglanti.commit()

    def programEkle(self, ismi ,apt):
        with open(apt, "rb") as input_file:
            kodlar = input_file.read()
            self.veriEkle(ismi, "", kodlar, "{}")
            input_file.close()