"""User settings endpoints."""
from __future__ import annotations

from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel

from app.cloud_session import CloudUser, get_session
from app.db.session import get_store
from app.db.store import Store

router = APIRouter()

_ALLOWED_KEYS = frozenset({"cooking_equipment", "unit_system", "shopping_locale", "sensory_preferences", "time_first_layout"})


class SettingBody(BaseModel):
    value: str


@router.get("/{key}")
async def get_setting(
    key: str,
    session: CloudUser = Depends(get_session),
    store: Store = Depends(get_store),
) -> dict:
    """Return the stored value for a settings key."""
    if key not in _ALLOWED_KEYS:
        raise HTTPException(status_code=422, detail=f"Unknown settings key: '{key}'.")
    value = store.get_setting(key)
    if value is None:
        raise HTTPException(status_code=404, detail=f"Setting '{key}' not found.")
    return {"key": key, "value": value}


@router.put("/{key}")
async def set_setting(
    key: str,
    body: SettingBody,
    session: CloudUser = Depends(get_session),
    store: Store = Depends(get_store),
) -> dict:
    """Upsert a settings key-value pair."""
    if key not in _ALLOWED_KEYS:
        raise HTTPException(status_code=422, detail=f"Unknown settings key: '{key}'.")
    store.set_setting(key, body.value)
    return {"key": key, "value": body.value}
