import { Head, usePage } from '@inertiajs/react';

type Widget = {
    type: string; title?: string; metric?: string;
    data?: { value: number | null; unit: string; period?: { start: string; end: string }; freshness?: string };
};

function format(value: number | null | undefined, unit: string): string {
    if (value === null || value === undefined) return '—';
    if (unit === 'currency') return '$' + value.toLocaleString(undefined, { maximumFractionDigits: 0 });
    if (unit === 'percent') return value + '%';
    return value.toLocaleString();
}

export default function DashboardShow() {
    const { dashboard, widgets } = usePage().props as unknown as {
        dashboard: { name: string }; widgets: Widget[];
    };

    return (
        <>
            <Head title={dashboard.name} />
            <div className="mx-auto w-full max-w-6xl px-6 py-8">
                <h1 className="mb-6 text-2xl font-semibold tracking-tight text-foreground">{dashboard.name}</h1>
                <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
                    {widgets.map((w, i) => (
                        <div key={i} className="rounded-xl border border-border bg-card p-5 shadow-sm">
                            <p className="text-sm font-medium text-muted-foreground">{w.title ?? w.metric}</p>
                            <p className="mt-2 text-3xl font-semibold text-foreground">
                                {format(w.data?.value, w.data?.unit ?? 'number')}
                            </p>
                            {w.data?.period && (
                                <p className="mt-2 text-xs text-muted-foreground">{w.data.period.start} → {w.data.period.end}</p>
                            )}
                        </div>
                    ))}
                </div>
            </div>
        </>
    );
}
