"use client" import React, { useState, useEffect } from "react" import { useTranslations } from "next-intl" import { Button } from "@/components/ui/button" import { Zap, Eye, EyeOff } from "lucide-react" import { useToast } from "@/components/ui/use-toast" import { Input } from "@/components/ui/input" import { Switch } from "@/components/ui/switch" import { Label } from "@/components/ui/label" import { Checkbox } from "@/components/ui/checkbox" interface EmailServiceConfig { enabled: boolean apiKey: string roleLimits: { duke: number knight: number } } export function EmailServiceConfig() { const t = useTranslations("profile.emailService") const tCard = useTranslations("profile.card") const tSend = useTranslations("emails.send") const [config, setConfig] = useState({ enabled: false, apiKey: "", roleLimits: { duke: -1, knight: -1, } }) const [loading, setLoading] = useState(false) const [showToken, setShowToken] = useState(false) const { toast } = useToast() useEffect(() => { fetchConfig() }, []) const fetchConfig = async () => { try { const res = await fetch("/api/config/email-service") if (res.ok) { const data = await res.json() as EmailServiceConfig setConfig(data) } } catch (error) { console.error("Failed to fetch email service config:", error) } } const handleSave = async () => { setLoading(true) try { const saveData = { enabled: config.enabled, apiKey: config.apiKey, roleLimits: config.roleLimits } const res = await fetch("/api/config/email-service", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(saveData), }) if (!res.ok) { const error = await res.json() as { error: string } throw new Error(error.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("enableDescription")}

setConfig((prev: EmailServiceConfig) => ({ ...prev, enabled: checked })) } />
{config.enabled && ( <>
) => setConfig((prev: EmailServiceConfig) => ({ ...prev, apiKey: e.target.value }))} placeholder={t("apiKeyPlaceholder")} />

{t("fixedRoleLimits")}

{tCard("roles.EMPEROR")} - {t("emperorLimit")}
{tCard("roles.CIVILIAN")} - {t("civilianLimit")}

{t("configRoleLabel")}

{[ { value: "duke", label: tCard("roles.DUKE"), key: "duke" as const }, { value: "knight", label: tCard("roles.KNIGHT"), key: "knight" as const } ].map((role) => { const isDisabled = config.roleLimits[role.key] === -1 const isEnabled = !isDisabled return (
{ setConfig((prev: EmailServiceConfig) => ({ ...prev, roleLimits: { ...prev.roleLimits, [role.key]: checked ? 0 : -1 } })) }} />

{isEnabled ? t("enabled") : t("disabled")}

) => setConfig((prev: EmailServiceConfig) => ({ ...prev, roleLimits: { ...prev.roleLimits, [role.key]: parseInt(e.target.value) || 0 } })) } className="w-20 h-9 text-center text-sm font-medium" placeholder="0" disabled={isDisabled} /> {tSend("dailyLimitUnit")}

0 = {t("unlimited")}

) })}
)}
) }