"""FastAPI routes for the Hermes digital pet dashboard plugin."""
from __future__ import annotations

import importlib.util
import sys
from pathlib import Path
from typing import Any, Dict

from fastapi import APIRouter
from pydantic import BaseModel, Field

_PLUGIN_ROOT = Path(__file__).resolve().parents[1]
_STATE_PATH = _PLUGIN_ROOT / "state.py"
_SPEC = importlib.util.spec_from_file_location("hermes_digital_pet_state", _STATE_PATH)
if _SPEC is None or _SPEC.loader is None:  # pragma: no cover
    raise RuntimeError("Unable to load digital pet state module")
_state_mod = importlib.util.module_from_spec(_SPEC)
sys.modules.setdefault("hermes_digital_pet_state", _state_mod)
_SPEC.loader.exec_module(_state_mod)

router = APIRouter()


class PetEvent(BaseModel):
    type: str = Field(..., min_length=1, max_length=64)
    metadata: Dict[str, Any] = Field(default_factory=dict)


@router.get("/state")
async def get_state():
    return {"ok": True, "state": _state_mod.load_state().public()}


@router.post("/event")
async def post_event(event: PetEvent):
    state = _state_mod.apply_event(event.type, metadata=event.metadata, persist=True)
    return {"ok": True, "state": state.public()}
