"use client"; import { useEffect, useState } from "react"; import Card from "@/components/ui/Card"; import Badge from "@/components/ui/Badge"; import Button from "@/components/ui/Button"; interface Turno { id: string; fechaInicio: string; fechaFin: string; estado: "PENDIENTE" | "CONFIRMADO" | "CANCELADO" | "COMPLETADO"; tipoServicio: { nombre: string }; auto: { marca: string; modelo: string; patente: string }; cliente: { nombre: string; apellido: string; telefono: string }; } export default function AdminDashboard() { const [fecha, setFecha] = useState(() => new Date().toISOString().slice(0, 10)); const [turnos, setTurnos] = useState([]); const [loading, setLoading] = useState(true); const [completando, setCompletando] = useState>(new Set()); const [comentarios, setComentarios] = useState>({}); useEffect(() => { cargar(); }, [fecha]); async function cargar() { setLoading(true); const res = await fetch(`/api/admin/turnos?fecha=${fecha}`); const data = await res.json(); setTurnos(data); setLoading(false); } async function cambiarEstado(id: string, estado: string, comentario?: string) { await fetch(`/api/admin/turnos/${id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ estado, comentario }), }); setCompletando((prev) => { const s = new Set(prev); s.delete(id); return s; }); setComentarios((prev) => { const c = { ...prev }; delete c[id]; return c; }); cargar(); } function iniciarCompletado(id: string) { setCompletando((prev) => new Set(prev).add(id)); } function cancelarCompletado(id: string) { setCompletando((prev) => { const s = new Set(prev); s.delete(id); return s; }); setComentarios((prev) => { const c = { ...prev }; delete c[id]; return c; }); } function formatHora(iso: string) { return new Date(iso).toLocaleTimeString("es-AR", { hour: "2-digit", minute: "2-digit" }); } return (

Turnos del día

setFecha(e.target.value)} className="border border-gray-300 rounded-lg px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-blue-500 w-full sm:w-auto" />
{loading ? (
Cargando...
) : turnos.length === 0 ? (

No hay turnos para esta fecha.

) : (
{turnos.map((t) => (

{formatHora(t.fechaInicio)} – {formatHora(t.fechaFin)}

{t.tipoServicio.nombre}

Cliente {t.cliente.nombre} {t.cliente.apellido} Teléfono {t.cliente.telefono} Auto {t.auto.marca} {t.auto.modelo} Patente {t.auto.patente}
{t.estado === "PENDIENTE" && (
)} {t.estado === "CONFIRMADO" && !completando.has(t.id) && ( )} {t.estado === "CONFIRMADO" && completando.has(t.id) && (