import Link from "next/link";
import { prisma } from "@/lib/prisma";
import {
  formatMoney,
  formatDate,
  STATUT_RESERVATION_LABELS,
} from "@/lib/utils";
import { Button } from "@/components/ui/button";
import { Card, CardContent } from "@/components/ui/card";
import { Badge, statutBadgeVariant } from "@/components/ui/badge";
import { PageHeader } from "@/components/ui/page-header";
import { EmptyState } from "@/components/ui/empty-state";
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table";
import { Plus, CalendarRange } from "lucide-react";
import { ReservationFilters } from "@/components/modules/reservations/ReservationFilters";

export const dynamic = "force-dynamic";

interface PageProps {
  searchParams: { statut?: string };
}

export default async function ReservationsPage({ searchParams }: PageProps) {
  const where: { statut?: string } = {};
  if (searchParams.statut) where.statut = searchParams.statut;

  const [reservations, hotel] = await Promise.all([
    prisma.reservation.findMany({
      where,
      include: { client: true, chambre: true },
      orderBy: { date_arrivee: "desc" },
      take: 200,
    }),
    prisma.hotel.findFirst(),
  ]);
  const devise = hotel?.devise || "MAD";

  return (
    <div className="space-y-4">
      <PageHeader
        title="Réservations"
        description={`${reservations.length} réservation${reservations.length > 1 ? "s" : ""}`}
        action={
          <Button asChild variant="accent">
            <Link href="/reservations/nouvelle">
              <Plus className="w-4 h-4" />
              Nouvelle réservation
            </Link>
          </Button>
        }
      />

      <ReservationFilters />

      {reservations.length === 0 ? (
        <EmptyState
          icon={<CalendarRange className="w-8 h-8" />}
          title="Aucune réservation"
          description="Créez votre première réservation pour commencer."
          actionLabel="Nouvelle réservation"
          actionHref="/reservations/nouvelle"
        />
      ) : (
        <Card>
          <CardContent className="p-0">
            <Table>
              <TableHeader>
                <TableRow>
                  <TableHead>Client</TableHead>
                  <TableHead>Chambre</TableHead>
                  <TableHead>Arrivée</TableHead>
                  <TableHead>Départ</TableHead>
                  <TableHead>Nuits</TableHead>
                  <TableHead>Statut</TableHead>
                  <TableHead className="text-right">Total</TableHead>
                </TableRow>
              </TableHeader>
              <TableBody>
                {reservations.map((r) => (
                  <TableRow key={r.id}>
                    <TableCell>
                      <Link
                        href={`/reservations/${r.id}`}
                        className="font-medium hover:underline"
                      >
                        {r.client.nom_complet}
                      </Link>
                    </TableCell>
                    <TableCell>N° {r.chambre.numero}</TableCell>
                    <TableCell>{formatDate(r.date_arrivee)}</TableCell>
                    <TableCell>{formatDate(r.date_depart)}</TableCell>
                    <TableCell>{r.nb_nuits}</TableCell>
                    <TableCell>
                      <Badge variant={statutBadgeVariant(r.statut)}>
                        {STATUT_RESERVATION_LABELS[r.statut]}
                      </Badge>
                    </TableCell>
                    <TableCell className="text-right font-semibold">
                      {formatMoney(r.prix_total, devise)}
                    </TableCell>
                  </TableRow>
                ))}
              </TableBody>
            </Table>
          </CardContent>
        </Card>
      )}
    </div>
  );
}
