from dataclasses import dataclass, asdict
from datetime import datetime
from typing import List, Dict, Any
import uuid

@dataclass
class RoleplayScenario:
    id: str
    category: str
    objective: str
    details: Dict[str, Any]
    ai_role: str
    learner_role: str
    skills_to_assess: List[str]
    scenario_setup: Dict[str, Any]
    ai_character: Dict[str, Any]
    conversation_starter: str
    success_criteria: str
    created_at: str
    
    @classmethod
    def create_new(cls, category: str, objective: str, details: Dict[str, Any], 
                   ai_role: str, learner_role: str, skills_to_assess: List[str],
                   scenario_setup: Dict[str, Any], ai_character: Dict[str, Any],
                   conversation_starter: str, success_criteria: str) -> 'RoleplayScenario':
        return cls(
            id=str(uuid.uuid4()),
            category=category,
            objective=objective,
            details=details,
            ai_role=ai_role,
            learner_role=learner_role,
            skills_to_assess=skills_to_assess[:5],  # Max 5 skills
            scenario_setup=scenario_setup,
            ai_character=ai_character,
            conversation_starter=conversation_starter,
            success_criteria=success_criteria,
            created_at=datetime.now().isoformat()
        )
    
    def to_dict(self) -> Dict[str, Any]:
        return asdict(self)
    
    @classmethod
    def from_dict(cls, data: Dict[str, Any]) -> 'RoleplayScenario':
        return cls(**data)