# This Python file uses the following encoding: utf-8
import sys
import logging
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
#from PySide6.QtCore import QResource
from lib.ConfigLoader import ConfigLoader
from lib.DB.BusinessModel import BusinessModel
import rc_pyqcrm
import rc_qml
from lib.DB.DbManager import DbManager
from lib.DB.UserManager import UserManager
from lib.DB.AddressModel import AddressModel
from lib.DB.BTypeModel import BTypeModel
from lib.DB.ContactModel import ContactModel


# [pyqcrm]
# program-name=""
# version=

# [database]
# server=""
# port=
# user=""
# password=""
# name=""
# type=""

bad_config = False
address_model = None
business_model = None
business_type = None
contact_model = None
user = None

def initializeProgram():
    # print(f"In {__file__} file, initializeProgram()")
    global address_model, bad_config, business_model, user, business_type, contact_model
    if not bad_config:
        dbconf = config.getConfig()['database']
        DbManager(dbconf)
    bad_config = False
    business_model = BusinessModel()
    user = UserManager()
    address_model = AddressModel()
    business_type = BTypeModel()
    contact_model = ContactModel()

    publishContext()

def publishContext():
    # print(f"In {__file__} file, publishContext()")
    global engine, address_model, bad_config, business_model, user, business_type, contact_model
    engine.rootContext().setContextProperty("loggedin_user", user)
    engine.rootContext().setContextProperty("business_model", business_model)
    engine.rootContext().setContextProperty("address_model", address_model)
    engine.rootContext().setContextProperty("business_type", business_type)
    engine.rootContext().setContextProperty("contact_model", contact_model)

if __name__ == "__main__":
    #QResource.registerResource("rc_qml.py")
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()

    engine.addImportPath("qrc:/");

    # qml_file = Path(__file__).resolve().parent / "Gui/main.qml"

    qml_file = "qrc:/Gui/main.qml"

    config = ConfigLoader()


    if not config.getConfig():
        bad_config = True
        config.configurationReady.connect(initializeProgram)
    else:
        initializeProgram()


    engine.rootContext().setContextProperty("bad_config", bad_config) #     print(f"Fehler: {i}")
    engine.rootContext().setContextProperty("config", config)

    engine.load(qml_file)


    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec())
