"use client"; import { useReservas } from "@/hooks/useReservas"; import { useMesas } from "@/hooks/useMesas"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { CalendarDays, Check, X, Clock, User } from "lucide-react"; import { Reserva } from "@/types/reserva"; import { Mesa } from "@/types/mesa"; import { useToast } from "@/components/ui/toast"; export default function ReservasPage() { const { reservas, loading, updateReservaEstado, concluirReserva, confirmarComMesa } = useReservas(); const { mesas } = useMesas(); const { toast } = useToast(); const handleConcluir = async (reserva: Reserva) => { // Tentar encontrar a mesa se o estado for "Confirmada (Mesa X)" let mesaId: string | undefined; if (reserva.estado.includes("Mesa")) { const match = reserva.estado.match(/Mesa (\d+)/); if (match) { const num = parseInt(match[1]); const mesa = mesas.find(m => m.numero === num); mesaId = mesa?.id; } } const res = await concluirReserva(reserva.id, mesaId); if (res.success) { toast("Reserva concluída e mesa libertada.", "success"); } }; const handleUpdate = async (id: string, estado: any) => { const res = await updateReservaEstado(id, estado); if (res.success) { toast(`Reserva marcada como ${estado}`, "info"); } }; const getStatusColor = (estado: string) => { if (estado.startsWith("Confirmada")) return "bg-green-500/10 text-green-500 border-green-500/20"; switch (estado) { case "Pendente": return "bg-amber-500/10 text-amber-500 border-amber-500/20"; case "Recusada": case "Cancelada": return "bg-destructive/10 text-destructive border-destructive/20"; default: return "bg-muted text-muted-foreground border-border"; } }; return (

Gestão de Reservas

{new Date().toLocaleDateString('pt-PT')}
{loading ? (
) : reservas.length > 0 ? ( reservas.map((reserva) => (
{reserva.estado}
{reserva.data} às {reserva.hora}

{reserva.clienteEmail}

{reserva.pessoas} pessoas
{reserva.estado === "Pendente" && ( <> )} {reserva.estado.startsWith("Confirmada") && ( )}
)) ) : (

Sem reservas registadas

As reservas feitas pelos clientes através da App Android aparecerão aqui em tempo real.

)}
); }