"""
Modèles de données pour la GUI
Définit les structures de données utilisées par l'interface
"""

from dataclasses import dataclass
from datetime import datetime
from typing import Optional


@dataclass
class GUIState:
    """
    État de la GUI.
    
    Attributes:
        mode: Mode actuel ('shadow', 'assist', 'copilot', 'auto')
        is_running: Indique si le système est en cours d'exécution
        actions_count: Nombre d'actions observées
        patterns_count: Nombre de patterns détectés
        workflows_count: Nombre de workflows appris
        finetuning_status: Statut du fine-tuning (None, 'collecting', 'training', 'completed')
        finetuning_progress: Progression du fine-tuning (0-100 ou None)
    """
    mode: str = "shadow"
    is_running: bool = False
    actions_count: int = 0
    patterns_count: int = 0
    workflows_count: int = 0
    finetuning_status: Optional[str] = None
    finetuning_progress: Optional[int] = None
    
    def to_dict(self) -> dict:
        """
        Convertit l'état en dictionnaire.
        
        Returns:
            Dictionnaire représentant l'état
        """
        return {
            'mode': self.mode,
            'is_running': self.is_running,
            'actions_count': self.actions_count,
            'patterns_count': self.patterns_count,
            'workflows_count': self.workflows_count,
            'finetuning_status': self.finetuning_status,
            'finetuning_progress': self.finetuning_progress
        }
    
    @classmethod
    def from_dict(cls, data: dict) -> 'GUIState':
        """
        Crée un GUIState à partir d'un dictionnaire.
        
        Args:
            data: Dictionnaire contenant les données
            
        Returns:
            Instance de GUIState
        """
        return cls(
            mode=data.get('mode', 'shadow'),
            is_running=data.get('is_running', False),
            actions_count=data.get('actions_count', 0),
            patterns_count=data.get('patterns_count', 0),
            workflows_count=data.get('workflows_count', 0),
            finetuning_status=data.get('finetuning_status'),
            finetuning_progress=data.get('finetuning_progress')
        )


if __name__ == "__main__":
    """Tests des modèles de données"""
    print("Test des modèles de données")
    print("=" * 50)
    
    # Test 1: Création d'un GUIState par défaut
    print("\n1. Test GUIState par défaut:")
    state = GUIState()
    print(f"   Mode: {state.mode}")
    print(f"   Running: {state.is_running}")
    print(f"   Actions: {state.actions_count}")
    
    # Test 2: Création avec paramètres
    print("\n2. Test GUIState avec paramètres:")
    state2 = GUIState(
        mode="assist",
        is_running=True,
        actions_count=12,
        patterns_count=2,
        workflows_count=1,
        finetuning_status="collecting",
        finetuning_progress=50
    )
    print(f"   Mode: {state2.mode}")
    print(f"   Running: {state2.is_running}")
    print(f"   Actions: {state2.actions_count}")
    print(f"   Patterns: {state2.patterns_count}")
    print(f"   Workflows: {state2.workflows_count}")
    print(f"   Fine-tuning: {state2.finetuning_status} ({state2.finetuning_progress}%)")
    
    # Test 3: Conversion en dictionnaire
    print("\n3. Test to_dict:")
    data = state2.to_dict()
    print(f"   {data}")
    
    # Test 4: Création depuis dictionnaire
    print("\n4. Test from_dict:")
    state3 = GUIState.from_dict(data)
    print(f"   Mode: {state3.mode}")
    print(f"   Actions: {state3.actions_count}")
    
    # Test 5: Modification de l'état
    print("\n5. Test modification:")
    state.mode = "auto"
    state.is_running = True
    state.actions_count = 25
    print(f"   Mode: {state.mode}")
    print(f"   Running: {state.is_running}")
    print(f"   Actions: {state.actions_count}")
    
    print("\n✅ Tous les tests passent!")
