# Module GUI - Interface Utilisateur PyQt5

## Vue d'ensemble

Ce module fournit l'interface utilisateur minimale pour RPA Vision V2, incluant les indicateurs de mode, les contrôles système et les superpositions de suggestion.

## Composants

### 1. MinimalGUI (`minimal_gui.py`)

Interface principale de l'application avec:

- **Indicateurs de mode**: Affichage visuel du mode actuel (👀 Shadow, 🤝 Assisté, 🤖 Autopilot)
- **Contrôles**: Boutons Start, Pause et Stop pour contrôler le système
- **Notifications**: Système de notification intégré avec types (info, success, warning, error)
- **Raccourcis clavier**: Support des raccourcis pour un contrôle rapide

#### Méthodes principales

```python
# Mettre à jour l'indicateur de mode
gui.update_mode_indicator("shadow")  # "shadow", "assist", "auto"

# Afficher une notification
gui.show_notification("Message", "success")  # Types: info, success, warning, error

# Afficher une suggestion et attendre le retour
feedback = gui.show_suggestion(decision, animated=True)
# Retourne: "accept", "reject", ou "correct"
```

#### Signaux PyQt5

- `start_requested`: Émis quand l'utilisateur clique sur Start
- `stop_requested`: Émis quand l'utilisateur clique sur Stop
- `pause_requested`: Émis quand l'utilisateur clique sur Pause
- `emergency_stop_requested`: Émis lors d'un arrêt d'urgence

### 2. SuggestionOverlay (`suggestion_overlay.py`)

Superposition transparente pour afficher les suggestions d'actions avec surlignage visuel.

#### Fonctionnalités

- **Surlignage visuel**: Met en évidence l'élément UI suggéré avec un rectangle coloré
- **Panneau d'information**: Affiche les détails de l'action suggérée
- **Contrôles utilisateur**: Boutons et raccourcis pour accepter/refuser/corriger
- **Version animée**: `AnimatedSuggestionOverlay` avec effet de pulsation

#### Format de décision

```python
decision = {
    "action_type": "click",           # Type d'action
    "target_element": "bouton_valider", # Nom de l'élément cible
    "bbox": (x, y, w, h),             # Coordonnées de la bounding box
    "confidence": 0.95,               # Score de confiance (0-1)
    "description": "Description..."   # Description optionnelle
}
```

#### Raccourcis clavier

- **Entrée**: Accepter la suggestion
- **Échap**: Refuser la suggestion
- **Alt+C**: Demander une correction

### 3. Script de démonstration (`demo_gui.py`)

Script pour tester l'interface GUI de manière autonome.

```bash
cd geniusia2/gui
python demo_gui.py
```

## Utilisation

### Exemple basique

```python
from PyQt5.QtWidgets import QApplication
from geniusia2.gui import MinimalGUI
import sys

app = QApplication(sys.argv)
gui = MinimalGUI()

# Connecter les signaux
gui.start_requested.connect(lambda: print("Start demandé"))
gui.stop_requested.connect(lambda: print("Stop demandé"))

# Afficher l'interface
gui.show()

# Mettre à jour le mode
gui.update_mode_indicator("assist")

# Afficher une notification
gui.show_notification("Système prêt", "success")

sys.exit(app.exec_())
```

### Exemple avec suggestion

```python
# Créer une décision d'action
decision = {
    "action_type": "click",
    "target_element": "bouton_soumettre",
    "bbox": (450, 320, 120, 40),
    "confidence": 0.97,
    "description": "Cliquer pour soumettre le formulaire"
}

# Afficher la suggestion et attendre le retour
feedback = gui.show_suggestion(decision, animated=True)

if feedback == "accept":
    print("Action acceptée par l'utilisateur")
elif feedback == "reject":
    print("Action refusée par l'utilisateur")
elif feedback == "correct":
    print("Correction demandée par l'utilisateur")
```

## Intégration avec l'orchestrateur

L'interface GUI est conçue pour s'intégrer avec l'orchestrateur:

```python
from geniusia2.core.orchestrator import Orchestrator
from geniusia2.gui import MinimalGUI

# Créer l'orchestrateur
orchestrator = Orchestrator(...)

# Créer la GUI avec référence à l'orchestrateur
gui = MinimalGUI(orchestrator)

# Connecter les signaux
gui.start_requested.connect(orchestrator.start)
gui.stop_requested.connect(orchestrator.stop)
gui.pause_requested.connect(orchestrator.pause)
gui.emergency_stop_requested.connect(orchestrator.emergency_stop)

# L'orchestrateur peut mettre à jour la GUI
orchestrator.mode_changed.connect(gui.update_mode_indicator)
orchestrator.notification_needed.connect(gui.show_notification)
```

## Exigences satisfaites

### Exigence 1.5
- ✓ Indicateur visuel du Mode_Shadow (icône 👀)

### Exigence 2.1
- ✓ Surlignage des Élément_UI suggérés avec superposition visuelle claire

### Exigence 2.2
- ✓ Attente d'entrée utilisateur explicite (Entrée/Échap/Alt+C)

### Exigence 2.3, 2.4, 2.5
- ✓ Gestion des retours utilisateur (validation, refus, correction)

### Exigence 2.7
- ✓ Indicateur visuel du Mode_Assisté (icône 🤝)

### Exigence 3.7
- ✓ Indicateur visuel du Mode_Autopilot (icône 🤖)

## Dépendances

- PyQt5 >= 5.15.9
- PyQt5-Qt5 >= 5.15.2

## Notes de développement

- L'interface est conçue pour être minimale et non intrusive
- Les superpositions utilisent la transparence pour ne pas bloquer la vue
- Les raccourcis clavier fonctionnent même quand la fenêtre n'a pas le focus (pour certains)
- L'arrêt d'urgence (Ctrl+Pause) doit être géré au niveau système par l'orchestrateur
- Les notifications s'effacent automatiquement après 5 secondes
- La version animée de la superposition utilise un effet de pulsation pour attirer l'attention

## Améliorations futures possibles

- Support multi-écran amélioré
- Thèmes personnalisables (clair/sombre)
- Historique des suggestions dans l'interface
- Graphiques de confiance en temps réel
- Support de la localisation (i18n)
