import AppLayout from '@/layouts/app-layout';
import { index as alertIndex } from '@/routes/alerts';
import { type BreadcrumbItem, Notification as Alert } from '@/types';
import { Head, usePage } from '@inertiajs/react';
import RegisterBannerCard from "@/components/register-banner-card";
import {
    buildAlertColumns,
    columns as defaultColumns,
    type AlertAction,
} from '@/components/tables/alerts/columns';
import { DataTable } from '@/components/tables/alerts/data-table';
import { useState } from 'react';
import DeleteAlert from './delete';
import CreateAlert from './store';
import UpdateAlert from './update';

const breadcrumbs: BreadcrumbItem[] = [
    {
        title: 'Alertas',
        href: alertIndex().url,
    },
];

interface Props {
    alerts: Alert[];
    [key: string]: unknown;
}

export default function AlertAdmin() {
    const { alerts } = usePage<Props>().props;

    // Estados para crear, editar y eliminar
    const [open, setOpen] = useState(false);
    const [editOpen, setEditOpen] = useState(false);
    const [deleteOpen, setDeleteOpen] = useState(false);
    const [selectedAlert, setSelectedAlert] = useState<Alert | null>(null);

    // Acciones de la tabla
    const onAlertAction: ((action: AlertAction, row: Alert) => void) | undefined = (action, row) => {
        if (action === 'edit') {
            setSelectedAlert(row);
            setEditOpen(true);
        } else if (action === 'delete') {
            setSelectedAlert(row);
            setDeleteOpen(true);
        }
        // ...puedes manejar otras acciones aquí...
    };

    const actionVisibility = {
        view: true,
        edit: true,
        delete: true,
        duplicate: false,
    };
    const alertColumns = onAlertAction
        ? buildAlertColumns(onAlertAction, actionVisibility)
        : defaultColumns;

    // Handlers para cerrar los modales y limpiar selectedAlert
    const handleEditClose = (open: boolean) => {
        setEditOpen(open);
        if (!open) setSelectedAlert(null);
    };
    const handleDeleteClose = (open: boolean) => {
        setDeleteOpen(open);
        if (!open) setSelectedAlert(null);
    };

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title="Alertas y Notificaciones" />
            <div className="flex h-full flex-1 flex-col gap-4 overflow-x-auto rounded-xl p-4">
                <RegisterBannerCard
                    img="https://cdn-icons-png.flaticon.com/512/1256/1256650.png"
                    title="¡Administra tus alertas y notificaciones!"
                    description="Genera, gestiona y consulta alertas importantes para los usuarios y el equipo."
                    items={[
                        "Crea nuevas alertas para eventos importantes.",
                        "Notifica a los usuarios sobre acciones requeridas.",
                        "Consulta el historial de notificaciones enviadas."
                    ]}
                />
                <DataTable
                    columns={alertColumns}
                    data={alerts || []}
                    onCreate={() => setOpen(true)}
                    createButtonText="Crear alerta"
                />
                <CreateAlert open={open} setOpen={setOpen} />
                {selectedAlert && (
                    <>
                        <UpdateAlert
                            open={editOpen}
                            setOpen={handleEditClose}
                            alert={selectedAlert}
                        />
                        <DeleteAlert
                            open={deleteOpen}
                            setOpen={handleDeleteClose}
                            alert={selectedAlert}
                        />
                    </>
                )}
            </div>
        </AppLayout>
    );
}
