import { Button } from '@/components/ui/button';
import AppLayout from '@/layouts/app-layout';
import { type BreadcrumbItem } from '@/types';
import { Head, Link } from '@inertiajs/react';
import { Plus, GraduationCap } from 'lucide-react';
import { useCrudOperations } from '@/hooks/use-crud-operations';
import { ServerDataTable, PaginatedData } from '@/components/ui/server-data-table';
import { createBaseColumns, createMobileCard } from '@/lib/datatable-helpers';

interface EducationLevel {
    id: number;
    name: string;
    description?: string;
    created_at: string;
    updated_at: string;
}

interface Props {
    educationLevels: PaginatedData<EducationLevel>;
    filters: {
        search?: string;
    };
}

const breadcrumbs: BreadcrumbItem[] = [
    { title: 'Dashboard', href: '/dashboard' },
    { title: 'Niveles Educativos', href: '/education-levels' },
];

export default function EducationLevelsIndex({ educationLevels, filters }: Props) {
    const { handleDelete } = useCrudOperations({
        entityName: 'Nivel Educativo',
        entityNamePlural: 'Niveles Educativos',
        basePath: '/education-levels'
    });

    const columns = createBaseColumns<EducationLevel>({
        entityPath: '/education-levels',
        entityIcon: GraduationCap,
        handleDelete
    });

    const renderMobileCard = (level: EducationLevel) =>
        createMobileCard(level, '/education-levels', GraduationCap, handleDelete);

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title="Niveles Educativos" />

            <div className="flex h-full flex-1 flex-col gap-4 p-4 lg:gap-6 lg:p-6">
                {/* Header */}
                <div className="flex items-center justify-between">
                    <div className="flex items-center gap-3">
                        <div className="p-2 bg-emerald-100 dark:bg-emerald-900/20 rounded-lg">
                            <GraduationCap className="w-6 h-6 text-emerald-600 dark:text-emerald-400" />
                        </div>
                        <div>
                            <h1 className="text-2xl font-bold text-slate-900 dark:text-white sm:text-3xl">
                                Niveles Educativos
                            </h1>
                            <p className="text-slate-600 dark:text-slate-400 mt-1 text-sm sm:text-base">
                                Gestiona los niveles educativos del sistema
                            </p>
                        </div>
                    </div>
                    <div className="hidden sm:block">
                        <Button asChild className="bg-emerald-600 hover:bg-emerald-700 w-full sm:w-auto">
                            <Link href="/education-levels/create">
                                <Plus className="w-4 h-4 mr-2" />
                                Nuevo Nivel Educativo
                            </Link>
                        </Button>
                    </div>
                </div>
                <div className="block sm:hidden">
                    <Button asChild className="bg-emerald-600 hover:bg-emerald-700 w-full mt-2">
                        <Link href="/education-levels/create">
                            <Plus className="w-4 h-4 mr-2" />
                            Nuevo Nivel Educativo
                        </Link>
                    </Button>
                </div>
                {/* DataTable */}
                <ServerDataTable
                    columns={columns}
                    paginatedData={educationLevels}
                    searchKey="name"
                    searchPlaceholder="Buscar niveles educativos..."
                    emptyMessage="No se encontraron niveles educativos. Crea tu primer nivel educativo para comenzar."
                    renderMobileCard={renderMobileCard}
                    routeName="/education-levels"
                    initialSearch={filters?.search || ''}
                />
            </div>
        </AppLayout>
    );
}
