import { Head } from '@inertiajs/react';
import { Calendar, MapPin } from 'lucide-react';
import PortalLayout from '@/layouts/portal-layout';

interface Event {
    id: number;
    title: string;
    starts_at: string;
    ends_at: string | null;
    location: string | null;
    cover_url: string | null;
}

interface Registration {
    id: number;
    attended: boolean;
    event: Event;
}

function fmt(date: string) {
    return new Date(date).toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' });
}

function EventCard({ event }: { event: Event }) {
    return (
        <div className="rounded-xl border border-border bg-white overflow-hidden">
            {event.cover_url && (
                <div className="h-32 overflow-hidden">
                    <img src={event.cover_url} alt={event.title} className="w-full h-full object-cover" />
                </div>
            )}
            <div className="p-5">
                <h3 className="font-semibold text-[#0A2647] leading-snug mb-2">{event.title}</h3>
                <div className="space-y-1">
                    <div className="flex items-center gap-2 text-xs text-muted-foreground">
                        <Calendar size={12} />
                        <span>{fmt(event.starts_at)}{event.ends_at && event.ends_at !== event.starts_at ? ` – ${fmt(event.ends_at)}` : ''}</span>
                    </div>
                    {event.location && (
                        <div className="flex items-center gap-2 text-xs text-muted-foreground">
                            <MapPin size={12} />
                            <span>{event.location}</span>
                        </div>
                    )}
                </div>
            </div>
        </div>
    );
}

export default function Events({ registered, upcoming }: { registered: Registration[]; upcoming: Event[] }) {
    return (
        <>
            <Head title="Events" />
            <div className="space-y-10">
                <div>
                    <h1 className="font-serif text-2xl font-bold text-[#0A2647]">Events</h1>
                    <p className="mt-1 text-sm text-muted-foreground">Your registrations and upcoming ABEC events</p>
                </div>

                {registered.length > 0 && (
                    <section>
                        <h2 className="font-serif text-lg font-bold text-[#0A2647] mb-4">My Registrations</h2>
                        <div className="rounded-xl border border-border bg-white overflow-hidden">
                            <table className="w-full text-sm">
                                <thead className="bg-[#F0F5FB] border-b border-border">
                                    <tr>
                                        <th className="px-6 py-3 text-left text-xs font-semibold text-[#4A6585] uppercase tracking-wider">Event</th>
                                        <th className="px-6 py-3 text-left text-xs font-semibold text-[#4A6585] uppercase tracking-wider">Date</th>
                                        <th className="px-6 py-3 text-left text-xs font-semibold text-[#4A6585] uppercase tracking-wider">Attended</th>
                                    </tr>
                                </thead>
                                <tbody className="divide-y divide-border">
                                    {registered.map((r) => (
                                        <tr key={r.id} className="hover:bg-[#F9FBFD]">
                                            <td className="px-6 py-4 font-medium text-[#0A2647]">{r.event.title}</td>
                                            <td className="px-6 py-4 text-muted-foreground">{fmt(r.event.starts_at)}</td>
                                            <td className="px-6 py-4">
                                                {r.attended
                                                    ? <span className="text-xs font-semibold text-green-600">Yes</span>
                                                    : <span className="text-xs text-muted-foreground">—</span>}
                                            </td>
                                        </tr>
                                    ))}
                                </tbody>
                            </table>
                        </div>
                    </section>
                )}

                <section>
                    <h2 className="font-serif text-lg font-bold text-[#0A2647] mb-4">Upcoming Events</h2>
                    {upcoming.length === 0 ? (
                        <div className="rounded-xl border border-dashed border-[#C8D8EC] bg-[#EEF2F8] p-10 text-center">
                            <p className="text-sm text-muted-foreground">No upcoming events scheduled. Check back soon.</p>
                        </div>
                    ) : (
                        <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
                            {upcoming.map((event) => <EventCard key={event.id} event={event} />)}
                        </div>
                    )}
                </section>
            </div>
        </>
    );
}

Events.layout = (page: React.ReactNode) => <PortalLayout>{page}</PortalLayout>;
