import { Head, Link, router } from '@inertiajs/react';
import { Plus, Trash2 } from 'lucide-react';
import { useState } from 'react';
import { ConfirmDialog } from '@/components/admin/confirm-dialog';
import { DataTable, type Column } from '@/components/admin/data-table';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';

interface Event { id: number; title: string; location: string | null; starts_at: string; status: string; type: string; is_public: boolean }

interface Props { events: { data: Event[]; meta: any; links: any[] }; filters: { search?: string } }

export default function EventsIndex({ events, filters }: Props) {
    const [confirmDeleteId, setConfirmDeleteId] = useState<number | null>(null);

    const columns: Column<Event>[] = [
        { key: 'title', label: 'Event', sortable: true, render: (e) => (<div><p className="font-medium">{e.title}</p>{e.location && <p className="text-xs text-muted-foreground">{e.location}</p>}</div>) },
        { key: 'type', label: 'Type', render: (e) => <Badge variant="outline">{e.type}</Badge> },
        { key: 'starts_at', label: 'Date', sortable: true, render: (e) => <span className="text-sm text-muted-foreground">{new Date(e.starts_at).toLocaleDateString('en-GB')}</span> },
        { key: 'status', label: 'Status', render: (e) => <Badge variant={e.status === 'upcoming' ? 'default' : 'secondary'}>{e.status}</Badge> },
        { key: 'actions', label: '', className: 'w-20 text-right', render: (e) => (<div className="flex justify-end gap-1"><Button variant="ghost" size="sm" asChild><Link href={`/admin/events/${e.id}/edit`}>Edit</Link></Button><Button variant="ghost" size="icon" className="h-8 w-8 text-destructive hover:text-destructive" onClick={() => setConfirmDeleteId(e.id)}><Trash2 className="h-4 w-4" /></Button></div>) },
    ];

    return (
        <>
            <Head title="Events" />
            <div className="space-y-6">
                <div className="flex items-center justify-between">
                    <div><h1 className="text-2xl font-bold">Events</h1><p className="mt-1 text-sm text-muted-foreground">{events.meta.total} events</p></div>
                    <Button asChild><Link href="/admin/events/create"><Plus className="mr-2 h-4 w-4" /> New Event</Link></Button>
                </div>
                <DataTable data={events.data} columns={columns} meta={events.meta} links={events.links} searchable searchPlaceholder="Search events..." empty="No events found." />
            </div>
            <ConfirmDialog open={confirmDeleteId !== null} onOpenChange={(open) => !open && setConfirmDeleteId(null)} title="Delete event?" description="This is permanent." confirmLabel="Delete" variant="danger"
                onConfirm={() => confirmDeleteId !== null && router.delete(`/admin/events/${confirmDeleteId}`, { onSuccess: () => setConfirmDeleteId(null) })} />
        </>
    );
}
