"use client"; import { useEffect, useState } from "react"; import Card from "@/components/ui/Card"; import Button from "@/components/ui/Button"; import Input from "@/components/ui/Input"; interface Servicio { id: string; nombre: string; duracionHoras: number; activo: boolean; } export default function JefeServicios() { const [servicios, setServicios] = useState([]); const [loading, setLoading] = useState(true); const [nombre, setNombre] = useState(""); const [duracion, setDuracion] = useState(""); const [error, setError] = useState(null); const [guardando, setGuardando] = useState(false); useEffect(() => { cargar(); }, []); async function cargar() { setLoading(true); const res = await fetch("/api/jefe/servicios"); const data = await res.json(); setServicios(Array.isArray(data) ? data : []); setLoading(false); } async function agregar(e: React.FormEvent) { e.preventDefault(); setError(null); setGuardando(true); const res = await fetch("/api/jefe/servicios", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ nombre, duracionHoras: duracion }), }); setGuardando(false); if (!res.ok) { const d = await res.json().catch(() => ({})); setError(d.error ?? "No se pudo guardar el trabajo"); return; } setNombre(""); setDuracion(""); cargar(); } async function toggleActivo(s: Servicio) { await fetch(`/api/jefe/servicios/${s.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ activo: !s.activo }), }); cargar(); } async function editarDuracion(s: Servicio) { const valor = prompt(`Duración de "${s.nombre}" en horas:`, String(s.duracionHoras)); if (valor == null) return; const res = await fetch(`/api/jefe/servicios/${s.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ duracionHoras: valor }), }); if (!res.ok) { const d = await res.json().catch(() => ({})); alert(d.error ?? "No se pudo actualizar"); return; } cargar(); } async function eliminar(s: Servicio) { if (!confirm(`¿Eliminar el trabajo "${s.nombre}"?`)) return; const res = await fetch(`/api/jefe/servicios/${s.id}`, { method: "DELETE" }); const d = await res.json().catch(() => ({})); if (d.desactivado) alert("El trabajo ya tenía turnos asociados, así que se desactivó en vez de borrarse."); cargar(); } return (

Mis trabajos y tiempos

Cargá los trabajos que ofrecés y cuánto tardan. Son los que verá el cliente al reservar por WhatsApp.

setNombre(e.target.value)} required /> setDuracion(e.target.value)} className="sm:w-40" required />
{error &&

{error}

}
{loading ? (
Cargando...
) : servicios.length === 0 ? (

Todavía no cargaste ningún trabajo.

) : (
{servicios.map((s) => (

{s.nombre}

{s.duracionHoras} {s.duracionHoras === 1 ? "hora" : "horas"} {!s.activo && " · inactivo"}

))}
)}
); }