import { Head, Link, router } from '@inertiajs/react';
import { PlusIcon } from 'lucide-react';
import { ClassroomStatusBadge } from '@/components/classrooms/badges';
import { formatDate } from '@/components/classrooms/format';
import Pagination from '@/components/classrooms/pagination';
import type { Classroom, Paginated } from '@/components/classrooms/types';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import {
    Table,
    TableBody,
    TableCell,
    TableHead,
    TableHeader,
    TableRow,
} from '@/components/ui/table';
import {
    Tooltip,
    TooltipContent,
    TooltipTrigger,
} from '@/components/ui/tooltip';
import classrooms, { index as classroomsIndex } from '@/routes/classrooms';

type Props = {
    classrooms: Paginated<Classroom>;
    creditsAvailable: number;
};

export default function ClassroomsIndex({
    classrooms: classroomsPage,
    creditsAvailable,
}: Props) {
    const rows = classroomsPage.data;

    return (
        <>
            <Head title="Aule" />

            <div className="flex flex-1 flex-col gap-4 p-4">
                <div className="flex flex-wrap items-center justify-between gap-4">
                    <div>
                        <h1 className="text-xl font-semibold tracking-tight">
                            Aule
                        </h1>
                        <p className="text-muted-foreground text-sm">
                            Gestisci le aule virtuali e le lezioni della tua
                            organizzazione.
                        </p>
                    </div>

                    <div className="flex items-center gap-3">
                        <Badge variant="outline" className="h-fit">
                            Crediti disponibili: {creditsAvailable}
                        </Badge>

                        {creditsAvailable === 0 ? (
                            <Tooltip>
                                <TooltipTrigger asChild>
                                    <span tabIndex={0}>
                                        <Button disabled>
                                            <PlusIcon />
                                            Nuova aula
                                        </Button>
                                    </span>
                                </TooltipTrigger>
                                <TooltipContent>
                                    Nessun credito disponibile. Acquista un
                                    pacchetto per creare una nuova aula.
                                </TooltipContent>
                            </Tooltip>
                        ) : (
                            <Button asChild>
                                <Link href={classrooms.create()}>
                                    <PlusIcon />
                                    Nuova aula
                                </Link>
                            </Button>
                        )}
                    </div>
                </div>

                <div className="rounded-xl border">
                    <Table>
                        <TableHeader>
                            <TableRow>
                                <TableHead>Codice</TableHead>
                                <TableHead>Nome</TableHead>
                                <TableHead>Corso</TableHead>
                                <TableHead>Periodo</TableHead>
                                <TableHead>Discenti</TableHead>
                                <TableHead>Lezioni</TableHead>
                                <TableHead>Stato</TableHead>
                            </TableRow>
                        </TableHeader>
                        <TableBody>
                            {rows.length === 0 && (
                                <TableRow>
                                    <TableCell
                                        colSpan={7}
                                        className="text-muted-foreground h-24 text-center"
                                    >
                                        Nessuna aula creata. Crea la tua prima
                                        aula per iniziare.
                                    </TableCell>
                                </TableRow>
                            )}

                            {rows.map((classroom) => (
                                <TableRow
                                    key={classroom.uuid}
                                    className="cursor-pointer"
                                    onClick={() =>
                                        router.visit(
                                            classrooms.show(classroom.uuid),
                                        )
                                    }
                                >
                                    <TableCell className="font-mono text-xs">
                                        <Link
                                            href={classrooms.show(
                                                classroom.uuid,
                                            )}
                                            className="hover:underline"
                                            onClick={(e) => e.stopPropagation()}
                                        >
                                            {classroom.code}
                                        </Link>
                                    </TableCell>
                                    <TableCell className="font-medium">
                                        {classroom.name}
                                    </TableCell>
                                    <TableCell>
                                        {classroom.course_title ?? '—'}
                                    </TableCell>
                                    <TableCell>
                                        {classroom.starts_on ||
                                        classroom.ends_on
                                            ? `${formatDate(classroom.starts_on)} - ${formatDate(classroom.ends_on)}`
                                            : '—'}
                                    </TableCell>
                                    <TableCell>
                                        {classroom.participants_count}
                                        {classroom.max_participants !== null
                                            ? `/${classroom.max_participants}`
                                            : ''}
                                    </TableCell>
                                    <TableCell>
                                        {classroom.meetings_count}
                                    </TableCell>
                                    <TableCell>
                                        <ClassroomStatusBadge
                                            status={classroom.status}
                                        />
                                    </TableCell>
                                </TableRow>
                            ))}
                        </TableBody>
                    </Table>
                </div>

                <Pagination links={classroomsPage.links} />
            </div>
        </>
    );
}

ClassroomsIndex.layout = {
    breadcrumbs: [{ title: 'Aule', href: classroomsIndex() }],
};
