import { Head, Link, router } from '@inertiajs/react';
import { FormEvent } from 'react';
import PublicLayout from '@/Layouts/PublicLayout';
import Card from '@/Components/UI/Card';
import Badge from '@/Components/UI/Badge';

interface InstituteListItem {
    id: number;
    name: string;
    slug: string;
    description: string | null;
    subject_area: string | null;
    newly_proposed: boolean;
    programmes: { title: string; slug: string; duration_months: number | null; delivery_mode: string }[];
}

export default function Index({
    institutes,
    subjectAreas,
    filters,
}: {
    institutes: InstituteListItem[];
    subjectAreas: string[];
    filters: { subject_area?: string; duration?: string; delivery_mode?: string };
}) {
    const applyFilter = (key: string, value: string) => {
        router.get(
            route('institutes.index'),
            { ...filters, [key]: value || undefined },
            { preserveState: true, replace: true },
        );
    };

    return (
        <PublicLayout>
            <Head title="Institutes" />

            <section className="mx-auto max-w-7xl px-6 pb-10 pt-16 lg:px-margin-page">
                <p className="text-label-caps text-accent-gold">Institutional Directory</p>
                <h1 className="text-institutional-header mt-4 max-w-3xl text-on-surface">
                    A Global Ecosystem for Leadership &amp; Excellence
                </h1>
                <p className="text-body-lg mt-4 max-w-2xl text-on-surface-variant">
                    Discover our {institutes.length} specialised Institutes, each hosting rigorous Professional
                    Certification Programmes designed by world-class practitioners for global leaders.
                </p>
            </section>

            <section className="mx-auto max-w-7xl px-6 pb-6 lg:px-margin-page">
                <div className="flex flex-wrap items-center gap-4 rounded-lg border border-outline-variant bg-surface-container-lowest p-4">
                    <select
                        className="rounded border-outline-variant text-sm"
                        value={filters.subject_area ?? ''}
                        onChange={(e: FormEvent<HTMLSelectElement>) => applyFilter('subject_area', e.currentTarget.value)}
                    >
                        <option value="">Subject Area</option>
                        {subjectAreas.map((area) => (
                            <option key={area} value={area}>
                                {area}
                            </option>
                        ))}
                    </select>

                    <select
                        className="rounded border-outline-variant text-sm"
                        value={filters.duration ?? ''}
                        onChange={(e: FormEvent<HTMLSelectElement>) => applyFilter('duration', e.currentTarget.value)}
                    >
                        <option value="">Duration</option>
                        <option value="short">Up to 6 months</option>
                        <option value="medium">7–12 months</option>
                        <option value="long">13+ months</option>
                    </select>

                    <select
                        className="rounded border-outline-variant text-sm"
                        value={filters.delivery_mode ?? ''}
                        onChange={(e: FormEvent<HTMLSelectElement>) => applyFilter('delivery_mode', e.currentTarget.value)}
                    >
                        <option value="">Delivery Mode</option>
                        <option value="self_paced">Self-Paced</option>
                        <option value="cohort">Cohort</option>
                        <option value="hybrid">Hybrid</option>
                    </select>

                    <p className="ms-auto text-sm italic text-on-surface-variant">
                        Showing {institutes.length} Institutes
                    </p>
                </div>
            </section>

            <section className="mx-auto max-w-7xl px-6 pb-section-gap lg:px-margin-page">
                <div className="grid gap-6 md:grid-cols-3">
                    {institutes.map((institute) => {
                        const flagship = institute.programmes[0];

                        return (
                            <Card key={institute.id} hover>
                                {institute.newly_proposed && (
                                    <Badge tone="gold">Newly Proposed</Badge>
                                )}
                                <p className="text-label-caps mt-3 text-on-surface-variant">{institute.subject_area}</p>
                                <h3 className="text-course-title mt-2 text-on-surface">{institute.name}</h3>
                                {flagship && (
                                    <p className="text-body-md mt-1 text-on-surface-variant">{flagship.title}</p>
                                )}

                                {flagship && (
                                    <div className="mt-4 flex items-center gap-4 text-xs text-on-surface-variant">
                                        {flagship.duration_months && <span>⏱ {flagship.duration_months} Months</span>}
                                        <span className="capitalize">📍 {flagship.delivery_mode.replace('_', ' ')}</span>
                                    </div>
                                )}

                                {flagship && (
                                    <Link
                                        href={route('programmes.show', flagship.slug)}
                                        className="mt-6 inline-block text-sm font-medium text-jgcp-navy hover:underline"
                                    >
                                        Explore →
                                    </Link>
                                )}
                            </Card>
                        );
                    })}
                </div>
            </section>
        </PublicLayout>
    );
}
