from pydantic import BaseModel, RootModel
from typing import Optional, List
import json

class Medaille(BaseModel):
    """
    Modèle Medaille
    """
    id: Optional[int] = 0
    type: str # Or, Argent, Bronze
    sport: str
    categorie: str # ex : 80kg pour le judo
    pays: str # Nom FR du pays

    def loadFromJsonData(self, data: str):
        """
        Charge les données depuis une chaine json

        :param data: Données json
        :return: None
        """
        data = json.loads(data)
        for key, value in data.items():
            setattr(self, key, value)

    def validate(self) -> bool:
        """
        Valide les données

        :return: True si les données sont valides, False sinon
        """
        if self.type not in ["Or", "Argent", "Bronze"]:
            return False
        return True

class ListeMedaille(RootModel):
    root: List[Medaille] = []
    def loadFromJson(self, path: str):
        """
        Charge les données depuis un fichier json

        :param path: Chemin du fichier json
        :return: None
        """
        try:
            with open(path) as f:
                data = json.load(f)
                for discipline in data:
                    self.root.append(Medaille(**discipline))
        except FileNotFoundError:
            print(f"Le fichier {path} n'existe pas")
    def loadFromJsonData(self, data: str):
        """
        Charge les données depuis une chaine json
        :param data: Données json
        :return: None
        """
        data = json.loads(data)
        for discipline in data:
            self.root.append(Medaille(**discipline))