import { Head, router } from '@inertiajs/react';
import { useState } from 'react';
import AdminLayout from '@/Layouts/AdminLayout';
import Card from '@/Components/UI/Card';
import Badge from '@/Components/UI/Badge';

interface BankCourse {
    id: number;
    title: string;
    theme: string;
    description: string | null;
}

export default function Index({
    courses,
    themes,
    filters,
    programmes,
}: {
    courses: BankCourse[];
    themes: string[];
    filters: { theme?: string; search?: string };
    programmes: { id: number; title: string }[];
}) {
    const [selected, setSelected] = useState<Record<number, string>>({});

    const applyFilter = (key: string, value: string) => {
        router.get(route('admin.course-bank.index'), { ...filters, [key]: value || undefined }, {
            preserveState: true,
            replace: true,
        });
    };

    const promote = (course: BankCourse) => {
        const programmeId = selected[course.id];
        if (!programmeId) {
            alert('Choose a Programme to promote this course into.');
            return;
        }
        router.post(route('admin.course-bank.promote', course.id), { programme_id: programmeId });
    };

    return (
        <AdminLayout>
            <Head title="Course Bank" />

            <h1 className="text-institute-title text-on-surface">Reserved Course Bank</h1>
            <p className="text-body-md text-on-surface-variant">
                {courses.length} previously developed courses preserved for future Institutes or Programme expansion.
                Promote a course into an active Programme without data loss.
            </p>

            <div className="mt-6 flex flex-wrap gap-4">
                <select
                    className="rounded border-outline-variant text-sm"
                    value={filters.theme ?? ''}
                    onChange={(e) => applyFilter('theme', e.target.value)}
                >
                    <option value="">All Themes</option>
                    {themes.map((theme) => (
                        <option key={theme} value={theme}>
                            {theme}
                        </option>
                    ))}
                </select>
                <input
                    type="search"
                    placeholder="Search courses…"
                    defaultValue={filters.search ?? ''}
                    onKeyDown={(e) => {
                        if (e.key === 'Enter') {
                            applyFilter('search', (e.target as HTMLInputElement).value);
                        }
                    }}
                    className="rounded border-outline-variant text-sm"
                />
            </div>

            <div className="mt-6 space-y-3">
                {courses.map((course) => (
                    <Card key={course.id} className="flex flex-wrap items-center justify-between gap-4 p-4">
                        <div className="min-w-[240px] flex-1">
                            <Badge tone="neutral">{course.theme}</Badge>
                            <p className="mt-2 text-sm font-semibold text-on-surface">{course.title}</p>
                        </div>
                        <div className="flex items-center gap-3">
                            <select
                                className="rounded border-outline-variant text-sm"
                                value={selected[course.id] ?? ''}
                                onChange={(e) => setSelected((prev) => ({ ...prev, [course.id]: e.target.value }))}
                            >
                                <option value="">Select Programme…</option>
                                {programmes.map((programme) => (
                                    <option key={programme.id} value={programme.id}>
                                        {programme.title}
                                    </option>
                                ))}
                            </select>
                            <button
                                onClick={() => promote(course)}
                                className="rounded bg-jgcp-navy px-4 py-2 text-sm font-medium text-white hover:bg-primary-container"
                            >
                                Promote
                            </button>
                        </div>
                    </Card>
                ))}

                {courses.length === 0 && (
                    <Card>
                        <p className="text-body-md text-on-surface-variant">No banked courses match these filters.</p>
                    </Card>
                )}
            </div>
        </AdminLayout>
    );
}
