"""
Entités métier de l'application Pokémon Analyzer
"""
from dataclasses import dataclass
from typing import List, Dict, Optional
from datetime import datetime
[docs]
@dataclass
class Pokemon:
"""Entité représentant un Pokémon"""
number: int
pokedex_number: int # Numéro de Pokédex (peut être différent de number si form)
name: str # Nom traduit (ex: Dracaufeu)
api_name: str # Nom API/Anglais (ex: charizard)
types: List[str]
generation: int
description: Optional[str] = None # Description du Pokémon dans la langue courante
height: Optional[int] = None # Taille en décimètres
weight: Optional[int] = None # Poids en hectogrammes
abilities: List[Dict] = None # Liste des talents [{'name': '...', 'is_hidden': bool}]
def __str__(self) -> str:
return f"#{self.pokedex_number:03d} - {self.name.title()}"
[docs]
@dataclass
class TypeAnalysis:
"""Résultat d'analyse des types"""
weaknesses: List[str]
resistances: List[str]
immunities: List[str]
vulnerabilities: List[str]
def __str__(self) -> str:
return f"Faiblesses: {len(self.weaknesses)}, Résistances: {len(self.resistances)}"
[docs]
@dataclass
class AnalysisResult:
"""Résultat complet d'une analyse de Pokémon"""
pokemon: Pokemon
type_analysis: TypeAnalysis
confidence: float
timestamp: datetime
method: str
def __str__(self) -> str:
return f"{self.pokemon.name} - {self.confidence:.1%} ({self.method})"
[docs]
@dataclass
class OCRResult:
"""Résultat d'une reconnaissance OCR"""
success: bool
pokemon_name: Optional[str]
confidence: float
detected_text: Optional[str]
alternatives: List[Dict]
error: Optional[str] = None
[docs]
def is_valid(self) -> bool:
return self.success and self.pokemon_name is not None
[docs]
@dataclass
class CaptureRegion:
"""Région de capture d'écran"""
left: int
top: int
width: int
height: int
[docs]
def to_dict(self) -> dict:
return {
'left': self.left,
'top': self.top,
'width': self.width,
'height': self.height
}
[docs]
@classmethod
def from_dict(cls, data: dict) -> 'CaptureRegion':
return cls(
left=data['left'],
top=data['top'],
width=data['width'],
height=data['height']
)