"use client"; import { useState, useTransition } from "react"; import { Bot, Check, KeyRound, Save } from "lucide-react"; import { Badge, Button, Card, CardContent, Input, Label, RadioGroup, RadioGroupItem } from "poyraz-ui/atoms"; import { Alert, AlertDescription, AlertTitle, toast } from "poyraz-ui/molecules"; import { useTranslations } from "@/components/i18n/i18n-provider"; import type { AiProvider } from "@/server/db/schema/settings"; import { saveAiSettingsAction } from "./actions"; const providers: AiProvider[] = ["gemini", "openai", "groq", "ollama"]; export function AiSettingsForm({ initial, }: { initial: { provider: AiProvider; model: string | null; hasApiKey: boolean; }; }) { const t = useTranslations(); const [pending, startTransition] = useTransition(); const [provider, setProvider] = useState(initial.provider); const [savedProvider, setSavedProvider] = useState(initial.provider); const [model, setModel] = useState(initial.model ?? ""); const [hasApiKey, setHasApiKey] = useState(initial.hasApiKey); const providerHasApiKey = hasApiKey && provider === savedProvider; function submit(formData: FormData) { startTransition(async () => { const result = await saveAiSettingsAction(formData); if (result.errorKey) { toast.error(t(result.errorKey)); return; } setHasApiKey(Boolean(result.hasApiKey)); setSavedProvider(provider); toast.success(t("settings.ai.messages.saved")); }); } return (

{t("settings.ai.title")}

{t("settings.ai.description")}

{t("settings.ai.provider.title")}

{t("settings.ai.provider.description")}

{ setProvider(value as AiProvider); setModel(""); }} className="grid gap-3 sm:grid-cols-2 xl:grid-cols-4" aria-label={t("settings.ai.provider.ariaLabel")} > {providers.map((option) => ( ))}
setModel(event.target.value)} maxLength={200} placeholder={t(`settings.ai.providers.${provider}.defaultModel`)} />

{t("settings.ai.help.model")}

{provider === "ollama" ? ( ) : (
{providerHasApiKey && ( )}

)}
); }