import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import AlertDeleteAction from '@/Pages/Alert/AlertDeleteAction';
import { AlertsTable } from '@/Pages/Alert/AlertsTable';
import { Alert, AlertsResponse, User } from '@/types';
import { Head } from '@inertiajs/react';
import { ColumnDef } from '@tanstack/react-table';
import dayjs from 'dayjs';

interface AdminListProps {
    alerts: AlertsResponse;
    availableChannels: string[];
    availableMeasureTypes: string[];
    availableConditionTypes: string[];
    availablePeriodUnits: string[];
}

export default function AdminList({
    alerts,
    availableChannels,
    availableMeasureTypes,
    availableConditionTypes,
    availablePeriodUnits,
}: AdminListProps) {
    const tableColumns: ColumnDef<Alert>[] = [
        {
            header: 'Utente',
            cell: ({ row }) => {
                const alert: Alert = row.original;
                const user: User = alert.user;

                return <span>{`${user.name} ${user.surname}`}</span>;
            },
        },
        {
            header: 'Condizione',
            cell: ({ row }) => {
                const alert: Alert = row.original;

                return <span>{alert.condition_as_text}</span>;
            },
        },
        {
            header: 'Ultima notifica',
            cell: ({ row }) => {
                const alert: Alert = row.original;
                const lastNotification = alert.notifications.length
                    ? alert.notifications[0]
                    : null;
                const lastNotificationDate = lastNotification
                    ? dayjs(lastNotification.created_at).format(
                          'DD.MM.YYYY - HH:mm',
                      )
                    : '';

                return <span>{lastNotificationDate}</span>;
            },
        },
        {
            id: 'actions',
            cell: ({ row }) => {
                const alert: Alert = row.original;

                return <AlertDeleteAction alert={alert} />;
            },
        },
    ];

    return (
        <AuthenticatedLayout
            backLink={route('dashboard')}
            backLinkLabel="Dashboard"
        >
            <Head title="Avvisi" />

            <div className="py-2">
                <div className="mx-auto max-w-7xl sm:px-6 lg:px-8">
                    <div className="overflow-hidden sm:rounded-lg">
                        <div className="p-6 text-gray-900">
                            <div className="scroll-m-20 text-4xl font-light tracking-tight lg:text-5xl">
                                Avvisi
                            </div>
                            <div className="container mx-auto py-10">
                                <AlertsTable
                                    columns={tableColumns}
                                    availableConditionTypes={
                                        availableConditionTypes
                                    }
                                    availablePeriodUnits={availablePeriodUnits}
                                    data={alerts.data}
                                    rowCount={alerts.total}
                                    pageSize={alerts.per_page}
                                    pageCount={alerts.last_page}
                                    availableMeasureTypes={
                                        availableMeasureTypes
                                    }
                                    availableChannels={availableChannels}
                                />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </AuthenticatedLayout>
    );
}
