import datetime
import os
import sqlite3
import subprocess
from IFikomObject import IFikoObject
from IProgram import IProgram


class IProcessDokuman: pass


def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d


class IFikoDBNC(IFikoObject):
    def __init__(self, sahip: IProcessDokuman = None):
        super(IFikoDBNC, self).__init__(sahip=sahip)
        self.sahip = sahip
        self.anaProgram = sahip.anaProgram
        # --->
        self.__processDokuman = sahip
        self.__dbKlasoru = self.__processDokuman.klasoru
        self.__baglanti = None
        # --->
        self.aptler = []

    @property
    def processDokuman(self) -> IProcessDokuman:
        return self.__processDokuman

    @processDokuman.setter
    def processDokuman(self, value: IProcessDokuman):
        self.__processDokuman = value

    @property
    def dbKlasoru(self) -> str:
        return self.__dbKlasoru

    @dbKlasoru.setter
    def dbKlasoru(self, value: str):
        self.__dbKlasoru = value

    # noinspection PyCallByClass,PyCallByClass
    def veriTabaniYarat(self):
        # noinspection PyCallByClass
        dsyaIsmi = str(self.processDokuman.ismi).split('.')[0] + "[" + 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
                            );
                          """)

    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, prg: IProgram):
        __tezgah = self.processDokuman.fikoPost.tezgah
        if __tezgah.kureMerkezi == 1:
            ekBilgi = "{kureMerkezi:True}"
        else:
            ekBilgi = None
        aptDsy = prg.apt
        with open(aptDsy, "rb") as input_file:
            kodlar = input_file.read()
            self.veriEkle(prg.ismi, prg.aciklama, kodlar, ekBilgi)
        self.processDokuman.fikoPost.klasoruTemizle(val=["FikoApt", "log", "FikoApt_LOG", "LOG"])


import IProcessDokuman
