"use client" import { useState } from "react" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Button } from "@/components/ui/button" import { useToast } from "@/components/ui/use-toast" import { Calendar, CheckCircle2, XCircle, Clock } from "lucide-react" const statusConfig: Record = { pendente: { label: "Pendente", color: "bg-yellow-100 text-yellow-800", icon: }, confirmado: { label: "Confirmado", color: "bg-blue-100 text-blue-800", icon: }, realizado: { label: "Realizado", color: "bg-green-100 text-green-800", icon: }, cancelado: { label: "Cancelado", color: "bg-red-100 text-red-800", icon: }, } type Agendamento = { id: string data_hora: string status: string observacoes: string | null created_at: string clientes: { nome: string; email: string } | null produtos: { nome: string } | null } export function AgendamentosTable({ agendamentos: inicial }: { agendamentos: Agendamento[] }) { const { toast } = useToast() const [itens, setItens] = useState(inicial) const [atualizando, setAtualizando] = useState(null) async function atualizarStatus(id: string, novoStatus: string) { setAtualizando(id) try { const res = await fetch(`/api/agendamento/${id}/status`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ status: novoStatus }), }) if (!res.ok) throw new Error("Erro ao atualizar") setItens((prev) => prev.map((a) => (a.id === id ? { ...a, status: novoStatus } : a)) ) toast({ title: `Status atualizado para "${novoStatus}"` }) } catch { toast({ title: "Erro ao atualizar status", variant: "destructive" }) } finally { setAtualizando(null) } } if (itens.length === 0) { return (
Nenhum agendamento encontrado.
) } return (
Cliente Produto Data / Hora Status Observações Ações {itens.map((a) => { const cfg = statusConfig[a.status] ?? { label: a.status, color: "bg-gray-100 text-gray-800", icon: null } const isLoading = atualizando === a.id return (

{a.clientes?.nome ?? "—"}

{a.clientes?.email ?? ""}

{a.produtos?.nome ?? "—"} {new Date(a.data_hora).toLocaleString("pt-BR", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })} {cfg.icon} {cfg.label} {a.observacoes ?? "—"}
{a.status !== "realizado" && ( )} {a.status !== "cancelado" && a.status !== "realizado" && ( )}
) })}
) }