"use client" import { useTranslations } from "next-intl" import { Button } from "@/components/ui/button" import { Settings } from "lucide-react" import { useToast } from "@/components/ui/use-toast" import { useState, useEffect } from "react" import { Role, ROLES } from "@/lib/permissions" import { Input } from "@/components/ui/input" import { Switch } from "@/components/ui/switch" import { Label } from "@/components/ui/label" import { Eye, EyeOff } from "lucide-react" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { EMAIL_CONFIG } from "@/config" export function WebsiteConfigPanel() { const t = useTranslations("profile.website") const tCard = useTranslations("profile.card") const [defaultRole, setDefaultRole] = useState("") const [emailDomains, setEmailDomains] = useState("") const [adminContact, setAdminContact] = useState("") const [maxEmails, setMaxEmails] = useState(EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString()) const [turnstileEnabled, setTurnstileEnabled] = useState(false) const [turnstileSiteKey, setTurnstileSiteKey] = useState("") const [turnstileSecretKey, setTurnstileSecretKey] = useState("") const [showSecretKey, setShowSecretKey] = useState(false) const [loading, setLoading] = useState(false) const { toast } = useToast() useEffect(() => { fetchConfig() }, []) const fetchConfig = async () => { const res = await fetch("/api/config") if (res.ok) { const data = await res.json() as { defaultRole: Exclude, emailDomains: string, adminContact: string, maxEmails: string, turnstile?: { enabled: boolean, siteKey: string, secretKey?: string } } setDefaultRole(data.defaultRole) setEmailDomains(data.emailDomains) setAdminContact(data.adminContact) setMaxEmails(data.maxEmails || EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString()) setTurnstileEnabled(Boolean(data.turnstile?.enabled)) setTurnstileSiteKey(data.turnstile?.siteKey ?? "") setTurnstileSecretKey(data.turnstile?.secretKey ?? "") } } const handleSave = async () => { setLoading(true) try { const res = await fetch("/api/config", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ defaultRole, emailDomains, adminContact, maxEmails: maxEmails || EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString(), turnstile: { enabled: turnstileEnabled, siteKey: turnstileSiteKey, secretKey: turnstileSecretKey } }), }) if (!res.ok) throw new Error(t("saveFailed")) toast({ title: t("saveSuccess"), description: t("saveSuccess"), }) } catch (error) { toast({ title: t("saveFailed"), description: error instanceof Error ? error.message : t("saveFailed"), variant: "destructive", }) } finally { setLoading(false) } } return (

{t("title")}

{t("defaultRole")}:
{t("emailDomains")}:
setEmailDomains(e.target.value)} placeholder={t("emailDomainsPlaceholder")} />
{t("adminContact")}:
setAdminContact(e.target.value)} placeholder={t("adminContactPlaceholder")} />
{t("maxEmails")}:
setMaxEmails(e.target.value)} placeholder={`${EMAIL_CONFIG.MAX_ACTIVE_EMAILS}`} />

{t("turnstile.enableDescription")}

setTurnstileSiteKey(e.target.value)} placeholder={t("turnstile.siteKeyPlaceholder")} />
setTurnstileSecretKey(e.target.value)} placeholder={t("turnstile.secretKeyPlaceholder")} />

{t("turnstile.secretKeyDescription")}

) }