"use client"; import { useState } from "react"; import { Check, X, Trash2, Mail, Phone } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { useAdmin, Reservation } from "@/contexts/AdminContext"; import { useLanguage } from "@/contexts/LanguageContext"; import { ApiError } from "@/lib/api"; import { toast } from "sonner"; export default function AdminReservations() { const { reservations, reservationsLoading, updateReservationStatus, deleteReservation } = useAdmin(); const { t, locale } = useLanguage(); const [filter, setFilter] = useState<"all" | Reservation["status"]>("all"); const [deleteId, setDeleteId] = useState(null); const statusConfig: Record = { pending: { label: t("admin.status.pending"), variant: "secondary" }, confirmed: { label: t("admin.status.confirmed"), variant: "default" }, cancelled: { label: t("admin.status.cancelled"), variant: "destructive" }, }; const filtered = reservations .filter((r) => filter === "all" || r.status === filter) .sort((a, b) => `${b.date}${b.time}`.localeCompare(`${a.date}${a.time}`)); const handleConfirm = async (id: string) => { try { await updateReservationStatus(id, "confirmed"); toast.success(t("admin.bookings.confirmed_toast")); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } }; const handleCancel = async (id: string) => { try { await updateReservationStatus(id, "cancelled"); toast.success(t("admin.bookings.cancelled_toast")); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } }; const handleDelete = async () => { if (!deleteId) return; try { await deleteReservation(deleteId); toast.success(t("admin.bookings.deleted_toast")); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } finally { setDeleteId(null); } }; return (

{t("admin.bookings.title")}

{reservations.length} {t("admin.bookings.subtitle")}

setFilter(v as typeof filter)}> {t("admin.bookings.tab_all")} {t("admin.bookings.tab_pending")} {t("admin.bookings.tab_confirmed")} {t("admin.bookings.tab_cancelled")} {reservationsLoading ? (
{Array.from({ length: 4 }).map((_, i) => (
))}
) : ( {t("admin.bookings.col_client")} {t("admin.bookings.col_contact")} {t("admin.bookings.col_service")} {t("admin.bookings.col_datetime")} {t("admin.status")} {t("admin.actions")} {filtered.length === 0 ? ( {t("admin.bookings.none")} ) : ( filtered.map((r) => ( {r.clientName}
{r.email}
{r.phone}
{r.service}
{new Date(r.date).toLocaleDateString(locale, { day: "2-digit", month: "short", year: "numeric" })}
{r.time}
{statusConfig[r.status].label} {r.status !== "confirmed" && ( )} {r.status !== "cancelled" && ( )}
)) )}
)} !o && setDeleteId(null)}> {t("admin.bookings.delete_title")} {t("admin.irreversible")} {t("admin.cancel")} {t("admin.delete")}
); }