"""Settings – get/update app-wide config stored in JSON."""
from fastapi import APIRouter, Depends
from app.middleware.auth import require_auth
from app.repository.store import settings_store
from app.schemas.schemas import SettingsUpdate
from app.utils.response import ok

router = APIRouter()

_DEFAULT = {
    "default_voice": "openai",
    "default_voice_gender": "female",
    "default_language": "en",
    "default_face_engine": "liveportrait",
    "default_resolution": "1080p",
    "watermark": False,
    "watermark_opacity": 0.35,
    "watermark_position": "bottom-right",
    "openai_key": "",
    "elevenlabs_key": "",
    "heygen_key": "",
    "did_key": "",
}


def _get_or_init() -> dict:
    rows = settings_store.list(per_page=1)["items"]
    if rows:
        return rows[0]
    return settings_store.create(_DEFAULT)


@router.get("/")
async def get_settings(_: str = Depends(require_auth)):
    return ok(_get_or_init())


@router.put("/")
async def update_settings(body: SettingsUpdate, _: str = Depends(require_auth)):
    s = _get_or_init()
    updates = {k: v for k, v in body.model_dump().items() if v is not None}
    updated = settings_store.update(s["id"], updates)
    return ok(updated, "Settings saved")
