import { getSetting } from "@/lib/settings"
import { ANTHROPIC_KEY_SETTING } from "@/lib/anthropic"
import { AICOS_KEY_SETTING, AICOS_BASE_URL_SETTING, AICOS_MODEL_SETTING } from "@/lib/aicos"
import { AnthropicKeyForm } from "@/components/admin/anthropic-key-form"
import { AicosSettingsForm } from "@/components/admin/aicos-settings-form"
import { Button } from "@/components/ui/button"
import { clearAnthropicKey, clearAicosSettings } from "./actions"

export const metadata = { title: "Admin — Réglages" }

function maskKey(key: string): string {
  if (key.length <= 12) return "••••••••"
  return `${key.slice(0, 10)}…${key.slice(-4)}`
}

export default async function AdminSettingsPage() {
  const stored = await getSetting(ANTHROPIC_KEY_SETTING)
  const usingEnvFallback = !stored && !!process.env.ANTHROPIC_API_KEY

  const [aicosKey, aicosBaseUrl, aicosModel] = await Promise.all([
    getSetting(AICOS_KEY_SETTING),
    getSetting(AICOS_BASE_URL_SETTING),
    getSetting(AICOS_MODEL_SETTING),
  ])
  const aicosConfigured = !!aicosKey && !!aicosBaseUrl && !!aicosModel

  return (
    <div>
      <h1 className="text-2xl font-heading font-bold uppercase tracking-tight text-[var(--text)] mb-8">
        Réglages
      </h1>

      <div className="border border-[var(--border)] bg-[var(--surface)] p-6 max-w-lg mb-8">
        <p className="font-mono text-xs uppercase tracking-widest text-[var(--accent)] mb-2">
          Clé API Anthropic (PROTO)
        </p>
        <p className="text-sm text-[var(--text-secondary)] mb-4">
          Utilisée par PROTO pour générer les concepts de drop avec Claude.
          Sans clé, PROTO utilise automatiquement un générateur par règles —
          rien ne casse si tu la laisses vide.
        </p>

        {stored ? (
          <p className="font-mono text-sm text-[var(--text)] mb-4">{maskKey(stored)}</p>
        ) : usingEnvFallback ? (
          <p className="text-sm text-[var(--text-muted)] mb-4">
            Aucune clé enregistrée ici, mais une clé est configurée côté
            serveur (variable d&rsquo;environnement).
          </p>
        ) : (
          <p className="text-sm text-[var(--text-muted)] mb-4">
            Aucune clé configurée — PROTO utilise le générateur par règles.
          </p>
        )}

        <AnthropicKeyForm hasStoredKey={!!stored} />

        {stored && (
          <form action={clearAnthropicKey} className="mt-3">
            <Button type="submit" variant="ghost" size="sm">
              Supprimer la clé enregistrée
            </Button>
          </form>
        )}
      </div>

      <div className="border border-[var(--border)] bg-[var(--surface)] p-6 max-w-lg">
        <p className="font-mono text-xs uppercase tracking-widest text-[var(--accent)] mb-2">
          AICOS Token Provider (repli de PROTO)
        </p>
        <p className="text-sm text-[var(--text-secondary)] mb-4">
          Si Claude n&rsquo;est pas configuré (ou échoue), PROTO essaie AICOS
          avant de retomber sur le générateur par règles. Les trois champs
          (clé, URL, modèle) sont nécessaires pour qu&rsquo;AICOS soit utilisé —
          rien ne casse si tu les laisses vides.
        </p>

        <div className="space-y-1 mb-4">
          <p className="font-mono text-sm text-[var(--text)]">
            Clé : {aicosKey ? maskKey(aicosKey) : <span className="text-[var(--text-muted)]">non configurée</span>}
          </p>
          <p className="font-mono text-sm text-[var(--text)]">
            URL : {aicosBaseUrl || <span className="text-[var(--text-muted)]">non configurée</span>}
          </p>
          <p className="font-mono text-sm text-[var(--text)]">
            Modèle : {aicosModel || <span className="text-[var(--text-muted)]">non configuré</span>}
          </p>
        </div>

        <AicosSettingsForm
          hasStoredKey={!!aicosKey}
          storedBaseUrl={aicosBaseUrl ?? ""}
          storedModel={aicosModel ?? ""}
        />

        {(aicosKey || aicosBaseUrl || aicosModel) && (
          <form action={clearAicosSettings} className="mt-3">
            <Button type="submit" variant="ghost" size="sm">
              Supprimer la config AICOS
            </Button>
          </form>
        )}

        {!aicosConfigured && (aicosKey || aicosBaseUrl || aicosModel) && (
          <p className="mt-3 text-xs text-[var(--text-muted)]">
            Config incomplète — AICOS ne sera pas utilisé tant que les trois
            champs ne sont pas renseignés.
          </p>
        )}
      </div>
    </div>
  )
}
