#!/usr/bin/env python3

import sys
import subprocess
from PySide6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QPushButton, QMessageBox, QLabel)
from PySide6.QtCore import Qt

# --- Configuration Polkit ---
# Ces IDs correspondent aux actions définies dans org.gekoos.actions.policy
POLKIT_ACTION_UPDATE = "org.gekoos.actions.update"
POLKIT_ACTION_DAVINCI = "org.gekoos.actions.install-davinci"

class GekoOS_AGC(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("gekoOS Configuration & Outils")
        self.setGeometry(100, 100, 400, 200)
        self.init_ui()

    def init_ui(self):
        layout = QVBoxLayout()
        
        title = QLabel("Gestion du Système Immuable (gekoOS)")
        title.setAlignment(Qt.AlignCenter)
        title.setStyleSheet("font-size: 16pt; font-weight: bold;")
        layout.addWidget(title)
        
        # --- Bouton 1: Mise à Jour du Système ---
        self.btn_update = QPushButton("Mettre à jour la Base du Système (Reboot Nécessaire)")
        self.btn_update.setStyleSheet("background-color: #2ECC71; color: white;")
        self.btn_update.clicked.connect(lambda: self.launch_polkit_action(POLKIT_ACTION_UPDATE, "Mise à Jour"))
        layout.addWidget(self.btn_update)

        # --- Bouton 2: Installation DaVinci Resolve (Conteneur) ---
        self.btn_davinci = QPushButton("Installer DaVinci Resolve (Isolé)")
        self.btn_davinci.setStyleSheet("background-color: #3498DB; color: white;")
        self.btn_davinci.clicked.connect(lambda: self.launch_polkit_action(POLKIT_ACTION_DAVINCI, "Resolve Installation"))
        layout.addWidget(self.btn_davinci)

        # --- Bouton 3: (Exemple) Revenir en Arrière (Rollback) ---
        self.btn_rollback = QPushButton("Revenir à la Version Précédente (Rollback)")
        self.btn_rollback.clicked.connect(self.show_not_implemented)
        layout.addWidget(self.btn_rollback)
        
        self.setLayout(layout)

    def launch_polkit_action(self, action_id, action_name):
        """
        Lance une action administrative en utilisant pkexec (via Polkit).
        Le Polkit Helper (pkexec) va demander le mot de passe puis exécuter le script.
        """
        QMessageBox.information(self, action_name, 
            f"L'opération '{action_name}' nécessite les droits administrateur. Veuillez entrer votre mot de passe.")

        # Construction de la commande pkexec pour lancer l'ID d'action Polkit
        # Polkit lira la règle associée (org.gekoos.actions.policy) et exécutera le script backend.
        command = [
            "/usr/bin/pkexec",
            action_id  # Polkit utilise l'ID comme argument pour trouver la commande à exécuter
        ]
        
        try:
            # Lance le processus et capture la sortie
            result = subprocess.run(command, capture_output=True, text=True, check=True)
            
            # Affiche la sortie du script (update-system.sh ou install-davinci.sh)
            QMessageBox.information(self, f"{action_name} - SUCCÈS", 
                f"Opération réussie. Message du système :\n\n{result.stdout}")

        except subprocess.CalledProcessError as e:
            # L'utilisateur a annulé, l'authentification a échoué, ou le script backend a renvoyé une erreur
            QMessageBox.critical(self, f"{action_name} - ÉCHEC", 
                f"L'opération a échoué ou a été annulée.\nErreur : {e.stderr}")
        except FileNotFoundError:
            QMessageBox.critical(self, "Erreur Critique", "pkexec n'a pas été trouvé. Le paquet Polkit est-il installé ?")

    def show_not_implemented(self):
        QMessageBox.warning(self, "Non Implémenté", 
                            "Cette fonctionnalité n'est pas encore implémentée dans cette version de gekoOS.")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    # Assurez-vous que l'application peut trouver la librairie Qt (PySide6)
    # L'OBS doit s'assurer que python3-qt5 est installé
    
    window = GekoOS_AGC()
    window.show()
    sys.exit(app.exec())