import { apiFetch, apiUrl } from "@/lib/api"; export interface UserRecord { id: string; username: string; role: "admin" | "user"; created_at: string; disabled?: boolean; /** Avatar marker: "", "icon::", or "img:". */ avatar?: string; } export async function listUsers(): Promise { const res = await apiFetch(apiUrl("/api/v1/auth/users")); if (!res.ok) throw new Error("Failed to fetch users"); return res.json(); } export async function deleteUser(username: string): Promise { const res = await apiFetch( apiUrl(`/api/v1/auth/users/${encodeURIComponent(username)}`), { method: "DELETE", }, ); if (!res.ok) { const data = await res.json().catch(() => ({})); throw new Error(data.detail ?? "Failed to delete user"); } } export async function setUserRole( username: string, role: "admin" | "user", ): Promise { const res = await apiFetch( apiUrl(`/api/v1/auth/users/${encodeURIComponent(username)}/role`), { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ role }), }, ); if (!res.ok) { const data = await res.json().catch(() => ({})); throw new Error(data.detail ?? "Failed to update role"); } } export interface CreatedUser { user_id: string; username: string; role: "admin" | "user"; is_admin: boolean; } export async function createUser( username: string, password: string, ): Promise { const res = await apiFetch(apiUrl("/api/v1/auth/users"), { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, password }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); const detail = data?.detail; const message = typeof detail === "string" ? detail : Array.isArray(detail) && detail.length > 0 && detail[0]?.msg ? String(detail[0].msg) : "Failed to create user"; throw new Error(message); } return (await res.json()) as CreatedUser; }