"""Server-wide settings that site admins change in the app, falling back to the env file.

- ai_monthly_cap_usd: Claude review spending allowed per center per calendar
  month. 0 turns reviews off. Default: AI_MONTHLY_CAP_USD (settings.py).
"""

from __future__ import annotations

from psycopg import Connection

from .db import Jsonb, fetchone
from .settings import get_settings

AI_CAP = "ai_monthly_cap_usd"


def ai_cap(conn: Connection) -> float:
    row = fetchone(conn, "SELECT value FROM app_settings WHERE name = %s", (AI_CAP,))
    return float(row["value"]) if row else get_settings().ai_monthly_cap_usd


def ai_cap_status(conn: Connection) -> dict:
    row = fetchone(
        conn,
        """SELECT s.value, s.updated_at, u.name AS updated_by FROM app_settings s
           LEFT JOIN users u ON u.id = s.updated_by WHERE s.name = %s""",
        (AI_CAP,),
    )
    default = get_settings().ai_monthly_cap_usd
    return {
        "monthly_cap_usd": float(row["value"]) if row else default,
        "source": "app" if row else "default",
        "default_usd": default,
        "updated_at": row["updated_at"] if row else None,
        "updated_by": row["updated_by"] if row else None,
    }


def set_ai_cap(conn: Connection, value: float, user_id: int) -> None:
    conn.execute(
        """INSERT INTO app_settings (name, value, updated_by) VALUES (%s, %s, %s)
           ON CONFLICT (name) DO UPDATE SET value = EXCLUDED.value, updated_by = EXCLUDED.updated_by, updated_at = now()""",
        (AI_CAP, Jsonb(round(value, 2)), user_id),
    )


def reset_ai_cap(conn: Connection) -> None:
    conn.execute("DELETE FROM app_settings WHERE name = %s", (AI_CAP,))
