"use client"; import { useRouter } from "next/navigation"; import { useState, type FormEvent } from "react"; import { ActionButton } from "@/components/ActionButton"; import { apiFetch, errorMessage } from "@/lib/client-api"; import type { Account, Role } from "@/lib/types"; const ROLES: { value: Role; label: string }[] = [ { value: "viewer", label: "leitura" }, { value: "admin", label: "admin" }, { value: "owner", label: "owner" }, ]; export type UserOption = { id: number; name: string }; function UserSelect({ users, value, onChange, label, }: { users: UserOption[]; value: number | null; onChange: (id: number | null) => void; label: string; }) { return ( ); } export function CreateAccountForm({ users }: { users: UserOption[] }) { const router = useRouter(); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [role, setRole] = useState("admin"); const [userId, setUserId] = useState(null); const [message, setMessage] = useState<{ ok: boolean; text: string } | null>(null); const [busy, setBusy] = useState(false); async function submit(e: FormEvent) { e.preventDefault(); setBusy(true); setMessage(null); try { await apiFetch("/accounts", { method: "POST", body: { username, password, role, user_id: userId } }); setUsername(""); setUserId(null); setPassword(""); setMessage({ ok: true, text: "Conta criada." }); router.refresh(); } catch (err) { setMessage({ ok: false, text: errorMessage(err) }); } finally { setBusy(false); } } return (
{message &&

{message.text}

}
); } export function AccountActions({ account, isSelf, users }: { account: Account; isSelf: boolean; users: UserOption[] }) { const router = useRouter(); const [error, setError] = useState(""); async function changeRole(role: Role) { setError(""); try { await apiFetch(`/accounts/${account.id}`, { method: "PATCH", body: { role } }); router.refresh(); } catch (err) { setError(errorMessage(err)); } } async function changeUser(userId: number | null) { setError(""); try { await apiFetch(`/accounts/${account.id}`, { method: "PATCH", body: { user_id: userId } }); router.refresh(); } catch (err) { setError(errorMessage(err)); } } async function resetPassword() { const password = window.prompt(`Nova senha para ${account.username} (mínimo 12 caracteres):`); if (!password) return; setError(""); try { await apiFetch(`/accounts/${account.id}/reset-password`, { method: "POST", body: { password } }); window.alert("Senha redefinida. As sessões abertas dessa conta foram encerradas."); } catch (err) { setError(errorMessage(err)); } } return (
{!isSelf && (account.disabled ? ( ) : ( ))} {error && {error}}
); }