import json

import mariadb
from PySide6.QtCore import QObject, Signal

from lib.domain.BaseModel import database


class ContactDAO(QObject):
    newObjectContactAdded = Signal(bool)

    def __init__(self):
        super().__init__()
        self.__con = database.connection()
        if self.__con:
            self.__cur = self.__con.cursor()

    def getContacts(self):
        print(f"*** File: {__file__}, getContacts()")

    def addContact(self, contact, enc_key):
        try:
            if self.__cur:
                self.__cur.callproc("addContactPerson", (enc_key, json.dumps(contact),))
                self.__con.commit()
                self.__cur.callproc("getLastInsertId")
                contact_id = self.__cur.fetchone()
                self.__cur.callproc("logger",(contact_id[0], "INSERT", "addContactPerson: New Contact added",))
                self.__con.commit()
                return contact_id[0]
            else:
                return None
        except mariadb.Error as e:
            print("MDB: " + str(e))
        except Exception as e:
            print("PYT: " + str(e))

    def addObjectContact(self, contact, objectid, enc_key):
        try:
            if self.__cur:
                self.__cur.callproc("addObjectContact", (enc_key, json.dumps(contact), objectid,))
                self.__con.commit()
                self.__cur.callproc("logObjectContact")
                self.__con.commit()
                # self.newObjectContactAdded.emit(True)
        except mariadb.Error as e:
            print("MDB (addObjectContact): " + str(e))
            self.newObjectContactAdded.emit(False)
        except Exception as e:
            print("PYT: " + str(e))
            self.newObjectContactAdded.emit(False)

    def getContact(self, contact_id, enc_key = None):
        try:
            if self.__cur:
                self.__cur.callproc("getCustomerContact", (contact_id, enc_key,))
                #self.__all_cols = [desc[0] for desc in self.__cur.description]
                return  self.__cur.fetchall() #, self.__all_cols
            else:
                return None #, None
        except mariadb.Error as e:
            print(str(e))


