"use client"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { Loader2 } from "lucide-react"; import { putAdminUser } from "@/api/admin-users"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useAdminProfile, useAdminSessionStore } from "@/stores/admin-session"; import { LotteryApiBizError } from "@/types/api/errors"; export function AccountSettingsConsole() { const { t } = useTranslation(["common"]); const adminProfile = useAdminProfile(); const refreshAdminProfile = useAdminSessionStore((s) => s.refreshAdminProfile); const [nickname, setNickname] = useState(""); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [loading, setLoading] = useState(false); useEffect(() => { queueMicrotask(() => { if (adminProfile) { setNickname(adminProfile.nickname ?? ""); } }); }, [adminProfile]); async function handleUpdateProfile() { if (!nickname.trim()) { toast.error(t("validation.required", { field: t("fields.nickname") })); return; } if (!adminProfile) { toast.error(t("actions.updateFailed")); return; } setLoading(true); try { await putAdminUser(adminProfile.id, { nickname: nickname.trim() }); toast.success(t("actions.updateSuccess")); void refreshAdminProfile(); } catch (err) { toast.error(err instanceof LotteryApiBizError ? err.message : t("actions.updateFailed")); } finally { setLoading(false); } } async function handleUpdatePassword() { if (!password) { toast.error(t("validation.required", { field: t("fields.newPassword") })); return; } if (password !== confirmPassword) { toast.error(t("validation.passwordMismatch")); return; } if (!adminProfile) { toast.error(t("actions.updateFailed")); return; } setLoading(true); try { await putAdminUser(adminProfile.id, { password }); toast.success(t("actions.updateSuccess")); setPassword(""); setConfirmPassword(""); } catch (err) { toast.error(err instanceof LotteryApiBizError ? err.message : t("actions.updateFailed")); } finally { setLoading(false); } } return (

{t("accountSettings")}

{t("accountSettingsDesc")}

{t("profileSettings")} {t("profileSettingsDesc")}
setNickname(e.target.value)} placeholder={t("placeholders.nickname")} />
{t("securitySettings")} {t("securitySettingsDesc")}
setPassword(e.target.value)} placeholder={t("placeholders.password")} />
setConfirmPassword(e.target.value)} placeholder={t("placeholders.confirmPassword")} />
); }