from qgis.core import QgsProject
from PyQt5 import uic
from PyQt5.QtWidgets import QDialog, QLineEdit, QRadioButton
from PyQt5.QtGui import QStandardItem, QStandardItemModel  # Correct import
from PyQt5.QtCore import QStringListModel, Qt
import os
import urllib.request

# Dossier cache local
ui_cache_dir = os.path.join(os.path.expanduser("~"), "qgis_ui_cache")
os.makedirs(ui_cache_dir, exist_ok=True)

# URL de base
base_url = "https://symbols.sde03.fr/qgis/ui/"

ui_file = "mode_integration.ui"

local_ui_path = os.path.join(ui_cache_dir, ui_file)

# Télécharger si nécessaire
if not os.path.exists(local_ui_path):
    urllib.request.urlretrieve(base_url + ui_file, local_ui_path)

# Charger le UI
uic.loadUi(local_ui_path, self)

# Définition du fichier UI à utiliser
#project_dir = QgsProject.instance().readPath('.')
#ui_path = os.path.join(project_dir, "Forms/mode_integration.ui")

class MonFormulaire(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        # Définir les champs
        self.mode_integration_pose = self.findChild(QRadioButton, "mode_integration_pose")
        self.mode_integration_depose = self.findChild(QRadioButton, "mode_integration_depose")
        self.mode_integration_remplacement = self.findChild(QRadioButton, "mode_integration_remplacement")
        self.mode_integration_exclu = self.findChild(QRadioButton, "mode_integration_exclu")


def afficher_formulaire():
    try:
        # Crée l'instance du formulaire
        formulaire = MonFormulaire()  

        # Affiche le formulaire
        formulaire.exec_()

        #Couche luminaire
        layer_noeuds = QgsProject.instance().mapLayersByName("Noeuds")[0]

        # Récupérer les entités sélectionnées
        selected_features = layer_noeuds.selectedFeatures()

        if formulaire.mode_integration_pose.isChecked():
            selected_mode = "Pose"
        elif formulaire.mode_integration_depose.isChecked():
            selected_mode = "Dépose"
        elif formulaire.mode_integration_remplacement.isChecked():
            selected_mode = "Remplacement"
        elif formulaire.mode_integration_exclu.isChecked():
            selected_mode = "Exclu"
        else:
            selected_mode = None  # Aucun bouton sélectionné

        if selected_mode is None:
            QMessageBox.warning(None, "Avertissement", "Aucun mode sélectionné !")
            return

        # Démarrer l'édition de la couche
        if not layer_noeuds.isEditable():
            layer_noeuds.startEditing()

        # Boucle pour traiter toutes les entités
        for feature in selected_features:
            # Modifier
            feature.setAttribute('mode_integration', selected_mode)

            #Validation de la modification
            layer_noeuds.updateFeature(feature)

        # Valider les modifications
        layer_noeuds.commitChanges()

        # Désactiver la sélection
        layer_noeuds.removeSelection()

        QMessageBox.information(None, "Succès", "Les modifications ont été appliquées avec succès.")
    

    except Exception as e:
        # Gestion des erreurs si le formulaire ne peut pas être chargé
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Critical)
        msg.setText("Impossible de charger le formulaire: " + str(e))
        msg.setWindowTitle("Erreur")
        msg.exec_()


# Appeler la fonction pour afficher le formulaire
afficher_formulaire()