import json
from PyQt5.QtWidgets import QDialog, QMessageBox, QLineEdit, QCompleter, QComboBox, QPushButton
from qgis.core import QgsProject


def copyData(feature):
    # On copie les données data dans une variable de projet
    QgsProject.instance().writeEntry("MyGroup", "data", json.dumps(feature['data']))


def formulaire(dialog, layer, feature):    
    try:
        #Bouton pour copier les Datas
        dialog.findChild(QPushButton, "btn_test").setEnabled(True)
        dialog.findChild(QPushButton, "btn_test").clicked.connect(
            lambda: copyData(feature)
        )

        # Infos Générales
        dialog.findChild(QLineEdit, "mode_integration").setText(feature['mode_integration'])

        if feature['data'] is None:
            feature['data'] = {}

        # Infos Armoire
        dialog.findChild(QLineEdit, "existant_prise_code_proprietaire_armoire").setText(feature['data'].get('existant', {}).get('prise', {}).get('code_proprietaire_armoire', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_code_proprietaire_armoire").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('code_proprietaire_armoire', ''))

        dialog.findChild(QLineEdit, "existant_prise_code_armoire").setText(feature['data'].get('existant', {}).get('prise', {}).get('code_armoire', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_code_armoire").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('code_armoire', ''))

        dialog.findChild(QLineEdit, "existant_prise_code_depart").setText(feature['data'].get('existant', {}).get('prise', {}).get('code_depart', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_code_depart").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('code_depart', ''))


        # Sortie de pilote
        dialog.findChild(QLineEdit, "existant_sortie_pilote_code_path_hote").setText(feature['data'].get('existant', {}).get('sortie_pilote', {}).get('code_path_hote', ''))
        dialog.findChild(QLineEdit, "nouveau_sortie_pilote_code_path_hote").setText(feature['data'].get('nouveau', {}).get('sortie_pilote', {}).get('code_path_hote', ''))

        dialog.findChild(QLineEdit, "existant_sortie_pilote_code_pilote").setText(feature['data'].get('existant', {}).get('sortie_pilote', {}).get('code_pilote', ''))
        dialog.findChild(QLineEdit, "nouveau_sortie_pilote_code_pilote").setText(feature['data'].get('nouveau', {}).get('sortie_pilote', {}).get('code_pilote', ''))

        dialog.findChild(QLineEdit, "existant_sortie_pilote_code_sortie_pilote").setText(feature['data'].get('existant', {}).get('sortie_pilote', {}).get('code_sortie_pilote',''))
        dialog.findChild(QLineEdit, "nouveau_sortie_pilote_code_sortie_pilote").setText(feature['data'].get('nouveau', {}).get('sortie_pilote', {}).get('code_sortie_pilote',''))


        # Infos prise
        dialog.findChild(QLineEdit, "existant_prise_code_marque").setText(feature['data'].get('existant', {}).get('prise', {}).get('code_marque', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_code_marque").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('code_marque', ''))

        dialog.findChild(QLineEdit, "existant_prise_code_reference_prise").setText(feature['data'].get('existant', {}).get('prise', {}).get('code_reference_prise', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_code_reference_prise").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('code_reference_prise', ''))

        dialog.findChild(QLineEdit, "existant_prise_nature_couleur").setText(feature['data'].get('existant', {}).get('prise', {}).get('nature_couleur', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_nature_couleur").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('nature_couleur', ''))

        dialog.findChild(QLineEdit, "existant_prise_code_couleur").setText(feature['data'].get('existant', {}).get('prise', {}).get('code_couleur', ''))
        dialog.findChild(QLineEdit, "nouveau_prise_code_couleur").setText(feature['data'].get('nouveau', {}).get('prise', {}).get('code_couleur', ''))



        # Mise à jour du style pour tous les QLineEdit
        for line_edit in dialog.findChildren(QLineEdit):
            if line_edit.text():
                # Vérifier si le nom commence par "nouveau"
                if line_edit.objectName().startswith("nouveau"):
                    if line_edit.objectName() == "nouveau_prise_code":
                        # Fond blue pour le remplacement
                        line_edit.setStyleSheet("background-color: blue; color: white;")
                    else:
                        # Appliquer un stylesheet spécifique
                        line_edit.setStyleSheet("background-color: lightgreen; color: black;")
                else:
                    # Appliquer un autre style si nécessaire (optionnel)
                    if line_edit.objectName() != "mode_integration":
                        line_edit.setStyleSheet("background-color: lightcoral; color: white;")


    except json.JSONDecodeError as e:
        print("Erreur lors du parsing du JSON :", e)
