'use client'; import { FormEvent, useEffect, useState } from 'react'; type Resource = 'users' | 'vehicles' | 'rides'; type Item = Record; async function adminRequest(path: string, init?: RequestInit) { const response = await fetch(`/api/admin/${path}`, { ...init, headers: { 'content-type': 'application/json', ...(init?.headers ?? {}) } }); const body = await response.json().catch(() => null); if (!response.ok) throw new Error(body?.detail ?? 'Admin request failed.'); return body; } export function AdminConsole() { const [resource, setResource] = useState('users'); const [items, setItems] = useState([]); const [message, setMessage] = useState(''); const [busy, setBusy] = useState(false); async function load(selected = resource) { setBusy(true); setMessage(''); try { const body = await adminRequest(`${selected}?page=1&page_size=50`); setItems(body.items ?? []); } catch (error) { setItems([]); setMessage(error instanceof Error ? error.message : 'Unable to load admin data.'); } finally { setBusy(false); } } useEffect(() => { void load(); }, [resource]); async function create(event: FormEvent) { event.preventDefault(); setBusy(true); setMessage(''); const form = new FormData(event.currentTarget); const payload = Object.fromEntries(form.entries()); try { await adminRequest(resource, { method: 'POST', body: JSON.stringify(payload) }); event.currentTarget.reset(); setMessage('Created.'); await load(); } catch (error) { setMessage(error instanceof Error ? error.message : 'Create failed.'); } finally { setBusy(false); } } async function archive(id: string) { setBusy(true); setMessage(''); try { await adminRequest(`${resource}/${id}`, { method: 'DELETE' }); setMessage(resource === 'rides' ? 'Ride archived.' : 'Deleted.'); await load(); } catch (error) { setMessage(error instanceof Error ? error.message : 'Action failed.'); } finally { setBusy(false); } } return
{(['users', 'vehicles', 'rides'] as Resource[]).map((value) => )}
{resource === 'users' && <>}{resource === 'vehicles' && <>}{resource === 'rides' && <>}
{message &&

{message}

}
{resource === 'users' ? <>{items.map((item) => {resource === 'users' ? <> : resource === 'vehicles' ? <> : <>})}
EmailRoleStatus : resource === 'vehicles' ? <>NicknameMake / modelOwner : <>RideRiderDistanceStatus}
{String(item.email)}{String(item.role)}{item.is_active ? 'Active' : 'Inactive'}{String(item.nickname)}{String(item.make)} {String(item.model)}{String(item.user_id)}{String(item.id).slice(0, 8)}{String(item.user_id)}{item.distance_miles == null ? '-' : `${item.distance_miles} mi`}{String(item.status)}{item.status !== 'archived' && }
{!busy && items.length === 0 &&

No {resource} found.

}
; }