from typing import Annotated, Any

from fastapi import APIRouter, Depends, HTTPException

from app.core.deps import get_current_user, require_admin
from app.schemas.settings import AiSettings, SettingsResponse, SettingsUpdate
from app.services.settings_store import load_settings, mask_settings_for_response, save_settings

router = APIRouter(tags=["settings"], dependencies=[Depends(get_current_user)])


@router.get("/api/settings", response_model=SettingsResponse)
async def get_settings():
    data = load_settings()
    masked = mask_settings_for_response(data)
    return SettingsResponse(
        ai=AiSettings(**masked["ai"]),
        agents=masked["agents"],
    )


@router.put("/api/settings", response_model=SettingsResponse)
async def update_settings(
    payload: SettingsUpdate,
    _admin: Annotated[dict[str, Any], Depends(require_admin)],
):
    if not payload.ai:
        raise HTTPException(status_code=400, detail="请提供 AI 配置")
    current = load_settings()
    ai = {**current["ai"], **payload.ai.model_dump()}
    if payload.ai.api_key == "********":
        ai["api_key"] = current["ai"].get("api_key") or ""
    try:
        data = save_settings({"ai": ai})
    except Exception as exc:
        raise HTTPException(status_code=400, detail=str(exc)) from exc
    masked = mask_settings_for_response(data)
    return SettingsResponse(
        ai=AiSettings(**masked["ai"]),
        agents=masked["agents"],
    )