from datetime import datetime

from app.schemas.base import CamelModel
from app.schemas.game import RouteResponse
from app.schemas.pokemon import PokemonResponse


class EncounterCreate(CamelModel):
    route_id: int
    pokemon_id: int
    nickname: str | None = None
    status: str
    catch_level: int | None = None
    is_shiny: bool = False
    origin: str | None = None


class EncounterUpdate(CamelModel):
    nickname: str | None = None
    status: str | None = None
    faint_level: int | None = None
    death_cause: str | None = None
    current_pokemon_id: int | None = None


class EncounterResponse(CamelModel):
    id: int
    run_id: int
    route_id: int
    pokemon_id: int
    current_pokemon_id: int | None
    nickname: str | None
    status: str
    catch_level: int | None
    faint_level: int | None
    death_cause: str | None
    is_shiny: bool
    caught_at: datetime


class EncounterDetailResponse(EncounterResponse):
    pokemon: PokemonResponse
    current_pokemon: PokemonResponse | None
    route: RouteResponse


class BulkRandomizeResponse(CamelModel):
    created: list[EncounterResponse]
    skipped_routes: int
