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):
    ##json_field = feature['data']
    #print("Valeur brute du champ JSON :", json_field)
    
    try:
        #data = json.loads(json_field)
        #print("JSON parsé :", data)
        #print("Valeur de la clé 'code_depart' :", json_field.get('code_depart', 'Non trouvée'))
        #print("Code départ : ", json_field['nouveau']['luminaire']['code_depart'])

        #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_luminaire_code_proprietaire_armoire").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_proprietaire_armoire', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_proprietaire_armoire").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_proprietaire_armoire', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_code_armoire").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_armoire', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_armoire").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_armoire', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_code_depart").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_depart', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_depart").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_depart', ''))

        # Infos Luminaire
        dialog.findChild(QLineEdit, "existant_luminaire_code_proprietaire").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_proprietaire', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_date_premiere_pose").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('date_premiere_pose', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_code").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code', ''))


        dialog.findChild(QLineEdit, "existant_luminaire_code_marque").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_marque', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_marque").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_marque', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_code_reference_luminaire").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_reference_luminaire', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_reference_luminaire").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_reference_luminaire', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_code_usage_luminaire").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_usage_luminaire', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_usage_luminaire").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_usage_luminaire', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_puissance").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('puissance', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_puissance").setText(str(feature['data'].get('nouveau', {}).get('luminaire', {}).get('puissance', '')))

        dialog.findChild(QLineEdit, "existant_luminaire_flux_lumineux").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('flux_lumineux', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_flux_lumineux").setText(str(feature['data'].get('nouveau', {}).get('luminaire', {}).get('flux_lumineux', '')))

        dialog.findChild(QLineEdit, "existant_luminaire_nature_couleur").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('nature_couleur', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_nature_couleur").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('nature_couleur', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_code_couleur").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('code_couleur', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_code_couleur").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('code_couleur', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_vetuste").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('vetuste', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_vetuste").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('vetuste', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_support_vetuste").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('support_vetuste', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_support_vetuste").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('support_vetuste', ''))

        dialog.findChild(QLineEdit, "existant_luminaire_support_bois").setText(feature['data'].get('existant', {}).get('luminaire', {}).get('support_bois', ''))
        dialog.findChild(QLineEdit, "nouveau_luminaire_support_bois").setText(feature['data'].get('nouveau', {}).get('luminaire', {}).get('support_bois', ''))
        
        

        # Infos Source
        dialog.findChild(QLineEdit, "existant_source_quantite").setText(str(feature['data'].get('existant', {}).get('source', {}).get('quantite', '')))
        dialog.findChild(QLineEdit, "nouveau_source_quantite").setText(feature['data'].get('nouveau', {}).get('source', {}).get('quantite', ''))

        dialog.findChild(QLineEdit, "existant_source_nb_led").setText(str(feature['data'].get('existant', {}).get('source', {}).get('nb_led', '')))
        dialog.findChild(QLineEdit, "nouveau_source_nb_led").setText(feature['data'].get('nouveau', {}).get('source', {}).get('nb_led', ''))

        dialog.findChild(QLineEdit, "existant_source_code_marque").setText(feature['data'].get('existant', {}).get('source', {}).get('code_marque', ''))
        dialog.findChild(QLineEdit, "nouveau_source_code_marque").setText(feature['data'].get('nouveau', {}).get('source', {}).get('code_marque', ''))

        dialog.findChild(QLineEdit, "existant_source_code_type_source").setText(feature['data'].get('existant', {}).get('source', {}).get('code_type_source', ''))
        dialog.findChild(QLineEdit, "nouveau_source_code_type_source").setText(feature['data'].get('nouveau', {}).get('source', {}).get('code_type_source', ''))

        dialog.findChild(QLineEdit, "existant_source_code_path_reference_source").setText(feature['data'].get('existant', {}).get('source', {}).get('code_path_reference_source', ''))
        dialog.findChild(QLineEdit, "nouveau_source_code_path_reference_source").setText(feature['data'].get('nouveau', {}).get('source', {}).get('code_path_reference_source', ''))

        dialog.findChild(QLineEdit, "existant_source_code_temperature_couleur").setText(feature['data'].get('existant', {}).get('source', {}).get('code_temperature_couleur', ''))
        dialog.findChild(QLineEdit, "nouveau_source_code_temperature_couleur").setText(feature['data'].get('nouveau', {}).get('source', {}).get('code_temperature_couleur', ''))


        dialog.findChild(QLineEdit, "existant_source_code_forme_source").setText(feature['data'].get('existant', {}).get('source', {}).get('code_forme_source', ''))
        dialog.findChild(QLineEdit, "nouveau_source_code_forme_source").setText(feature['data'].get('nouveau', {}).get('source', {}).get('code_forme_source', ''))

        dialog.findChild(QLineEdit, "existant_source_code_type_culot_source").setText(feature['data'].get('existant', {}).get('source', {}).get('code_type_culot_source', ''))
        dialog.findChild(QLineEdit, "nouveau_source_code_type_culot_source").setText(feature['data'].get('nouveau', {}).get('source', {}).get('code_type_culot_source', ''))

        # Infos Driver
        dialog.findChild(QLineEdit, "existant_driver_code_reference_pilote").setText(feature['data'].get('existant', {}).get('driver', {}).get('code_reference_pilote', ''))
        dialog.findChild(QLineEdit, "nouveau_driver_code_reference_pilote").setText(feature['data'].get('nouveau', {}).get('driver', {}).get('code_reference_pilote', ''))

        dialog.findChild(QLineEdit, "existant_driver_code_programme").setText(feature['data'].get('existant', {}).get('driver', {}).get('code_programme', ''))
        dialog.findChild(QLineEdit, "nouveau_driver_code_programme").setText(feature['data'].get('nouveau', {}).get('driver', {}).get('code_programme', ''))

        dialog.findChild(QLineEdit, "existant_driver_reglage").setText(str(feature['data'].get('existant', {}).get('driver', {}).get('reglage', '')))
        dialog.findChild(QLineEdit, "nouveau_driver_reglage").setText(feature['data'].get('nouveau', {}).get('driver', {}).get('reglage', ''))

        # 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',''))

        dialog.findChild(QLineEdit, "existant_source_remplacement_identique").setText(feature['data'].get('existant', {}).get('source', {}).get('remplacement_identique', ''))
        dialog.findChild(QLineEdit, "nouveau_source_remplacement_identique").setText(feature['data'].get('nouveau', {}).get('source', {}).get('remplacement_identique', ''))



        # 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_luminaire_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)
