import pathlib

from pydantic import BaseModel

from .base_mob import BaseMob


class CharacterModel(BaseModel):
    name: str
    max_pv: int
    current_pv: int
    strength: int
    protection: int
    speed: int
    mob_type: int


def save_character(character: BaseMob) -> str:
    filename = f'{character.name}.json'
    character_model = CharacterModel(
        name=character.name,
        max_pv=character.max_pv,
        current_pv=character.current_pv,
        strength=character.strength,
        protection=character.protection,
        speed=character.speed,
        mob_type=character.mob_type
    )
    pathlib.Path(filename).write_text(
        data=character_model.model_dump_json(indent=4),
        encoding='utf-8'
    )
    return filename


def load_character(name: str) -> BaseMob | None:
    json_data = pathlib.Path(f'{name}.json').read_text(encoding='utf-8')
    character_model = CharacterModel.model_validate_json(json_data)
    return BaseMob(
        name=character_model.name,
        max_pv=character_model.max_pv,
        strength=character_model.strength,
        protection=character_model.protection,
        speed=character_model.speed,
        mob_type=character_model.mob_type,
    )
