import AppLayout from '@/layouts/app-layout';
import { type BreadcrumbItem } from '@/types';
import { Head } from '@inertiajs/react';

import { ModuleCard } from '@/components/module-card';
import { Input } from '@/components/ui/input';
import { useState } from 'react';

import { ArrowRight, Users, ShieldCheck, BadgeCheck, Bell, Search, Dog, Heart, FileText, Hospital } from 'lucide-react';

type BadgeType = 'Usuarios' | 'Verificación' | 'Homologaciones' | 'Alertas' | 'Animales' | 'Adopciones' | 'Registros' | 'Veterinarias';
type BadgeVariant = 'default' | 'secondary' | 'outline' | 'destructive';

import { index as species } from '@/routes/species';
import { index as users } from '@/routes/users';
import { index as veterinaries } from '@/routes/veterinaries';
import { index as verifications } from '@/routes/verifications';
import { index as alerts } from '@/routes/admin-alerts';
import { index as harmonizations } from '@/routes/harmonizations';
const badgeIcons: Record<BadgeType, React.ElementType> = {
    Usuarios: Users,
    Verificación: ShieldCheck,
    Homologaciones: BadgeCheck,
    Alertas: Bell,
    Animales: Dog,
    Adopciones: Heart,
    Registros: FileText,
    Veterinarias: Hospital,
};
const badgeVariants: Record<BadgeType, BadgeVariant> = {
    Usuarios: 'default',
    Verificación: 'secondary',
    Homologaciones: 'outline',
    Alertas: 'destructive',
    Animales: 'default',
    Adopciones: 'secondary',
    Registros: 'outline',
    Veterinarias: 'default',
};

const breadcrumbs: BreadcrumbItem[] = [
    {
        title: 'Administrador',
        href: '/administrator',
    },
];

const modules: Array<{
    title: string;
    description: string;
    url: string;
    icon: React.ElementType;
    badge: BadgeType;
    active: boolean;
}> = [
    {
        title: 'Usuarios',
        description: 'Gestión y administración de usuarios del sistema.',
        url: users().url,
        icon: Users,
        badge: 'Usuarios',
        active: true,
    },
    {
        title: 'Verificación de Perfiles',
        description: 'Verifica y aprueba los perfiles registrados en la plataforma.',
        url: verifications().url,
        icon: ShieldCheck,
        badge: 'Verificación',
        active: true,
    },
    {
        title: 'Homologaciones',
        description: 'Gestión de solicitudes y procesos de homologación.',
        url: harmonizations().url,
        icon: BadgeCheck,
        badge: 'Homologaciones',
        active: true,
    },
    {
        title: 'Alertas o Notificaciones',
        description: 'Gestión y envío de alertas o notificaciones a los usuarios.',
        url: alerts().url,
        icon: Bell,
        badge: 'Alertas',
        active: true,
    },
    {
        title: 'Gestión de Animales',
        description: 'Administra el registro, perfil, razas y chips NFC de los animales en la plataforma.',
        url: species().url,
        icon: Dog,
        badge: 'Animales',
        active: true,
    },
    {
        title: 'Veterinarias',
        description: 'Registro y administración de veterinarias autorizadas para colocar chips NFC a los perros.',
        url: veterinaries().url,
        icon: Hospital,
        badge: 'Veterinarias',
        active: true,
    },
];

export default function AdministratorDashboard() {
    const [search, setSearch] = useState('');
    const filteredModules = modules.filter(
        (mod) =>
            mod.title.toLowerCase().includes(search.toLowerCase()) ||
            mod.description.toLowerCase().includes(search.toLowerCase()),
    );

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title="Administrador" />
            <div className="p-4">
                <div className="mb-6">
                    <h2 className="mb-2 text-2xl font-bold">Panel de módulos de administración</h2>
                    <p className="text-base text-muted-foreground">
                        Desde aquí puedes acceder y gestionar los diferentes módulos administrativos: usuarios, roles, permisos, reportes y más. Haz clic en el botón{' '}
                        <span className="inline-flex items-center">
                            <ArrowRight className="mx-1 h-4 w-4" /> Ir al módulo
                        </span>{' '}
                        para ingresar a cada sección.
                    </p>
                </div>
                <div className="mb-6 max-w-md">
                    <div className="relative">
                        <Input
                            type="text"
                            placeholder="Buscar módulo..."
                            value={search}
                            onChange={(e) => setSearch(e.target.value)}
                            className="w-full pl-10 pr-4 py-2 rounded-lg border focus:outline-none focus:ring-2 focus:ring-primary"
                        />
                        <span className="absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none">
                            <Search className="h-5 w-5" />
                        </span>
                    </div>
                </div>
                <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
                    {filteredModules.length === 0 ? (
                        <div className="col-span-full text-center text-muted-foreground">No se encontraron módulos.</div>
                    ) : (
                        filteredModules.map((mod, idx) => (
                            <ModuleCard
                                key={idx}
                                title={mod.title}
                                description={mod.description}
                                url={mod.url}
                                icon={mod.icon}
                                badge={mod.badge}
                                badgeIcon={badgeIcons[mod.badge]}
                                badgeVariant={badgeVariants[mod.badge]}
                                disabled={!mod.active}
                            />
                        ))
                    )}
                </div>
            </div>
        </AppLayout>
    );
}
