"use client"; import { useEffect, useState } from "react"; import { getTableByCount } from "../lib/getTableByCount"; import { envConfig } from "../lib/config"; import { getMesaByCount } from "../lib/getMesaByCount"; import { useRouter } from "next/navigation"; import SearchUser from "./Global/SearchUser/searchUser"; import Information from "./Global/Information/information"; import SearchMesa from "./SearchMesa"; import axios from "axios"; import Swal from "sweetalert2"; import Cookies from "js-cookie"; interface props { numAcount: string | null; table: number | null; } export default function CheckBoxMesa({ numAcount, table }: props) { const [modo, setModo] = useState<"Mesa" | "Cuenta" | null>("Cuenta"); const [bitacoraMesa, setBitacoraMesa] = useState(null); const [bitacoraCuenta, setBitacoraCuenta] = useState(null); const [tiempoRestante, setTiempoRestante] = useState(""); const [minutos, setMinutos] = useState(); const [errorMesa, setErrorMesa] = useState() const [errorCount, setErrorCount] = useState() const [loading, setLoading] = useState(false) const bitacora = modo === "Cuenta" ? bitacoraCuenta : bitacoraMesa; const router = useRouter(); const fetchByCuenta = async (idCuenta: number) => { const result = await getMesaByCount(idCuenta); if (result?.error) { setErrorCount(result.error); setBitacoraCuenta(null); } else { setBitacoraCuenta(result); } }; const fetchByMesa = async (idEquipo: number) => { const result = await getTableByCount(idEquipo); if (result?.error) { setErrorMesa(result.error); setBitacoraMesa(null); } else { setBitacoraMesa(result); } }; useEffect(() => { if (!numAcount) return; const idCuenta = parseInt(numAcount); if (isNaN(idCuenta)) return; fetchByCuenta(idCuenta); }, [numAcount]); useEffect(() => { if (!table) return; const idEquipo = table; if (isNaN(idEquipo)) return; fetchByMesa(idEquipo); }, [table]); useEffect(() => { if (!bitacora) return; const entrada = new Date(bitacora.tiempo_entrada).getTime(); const asignadoMs = bitacora.tiempo_asignado * 60 * 1000; const updateTimer = () => { const ahora = Date.now(); const restante = entrada + asignadoMs - ahora; if (restante <= 0) { setTiempoRestante("agotado"); setMinutos(0); return false; } const minutosRestantes = Math.floor(restante / 60000); const segundos = Math.floor((restante % 60000) / 1000); setMinutos(minutosRestantes + 1); setTiempoRestante( `${minutosRestantes} minuto(s) con ${segundos} segundo(s)` ); return true; }; updateTimer(); const interval = setInterval(() => { const sigue = updateTimer(); if (!sigue) clearInterval(interval); }, 1000); return () => clearInterval(interval); }, [bitacora]); const handleButton = async (e: React.MouseEvent) => { e.preventDefault(); setLoading(true); const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; try { if (!bitacora) return; await axios.patch( `${envConfig.apiUrl}/bitacora-mesa/cancelar/${bitacora.id_bitacora_mesa}`, { tiempo_asignado: minutos ?? 0 }, { headers } ); Swal.fire({ title: "Tiempo cancelado correctamente!", icon: "success", }); if (modo === "Cuenta" && numAcount) { fetchByCuenta(parseInt(numAcount)); } if (modo === "Mesa" && table) { fetchByMesa(table); } router.refresh(); setBitacoraMesa(null); setBitacoraCuenta(null); } catch (error) { Swal.fire({ title: "Error al cancelar tiempo", icon: "error", }); } finally { setLoading(false); } }; return ( <>
{modo === "Cuenta" && <>

{errorCount}

{bitacoraCuenta && tiempoRestante !== "agotado" && ( <> )} } {modo === "Mesa" && <>

{errorMesa}

{bitacoraMesa && tiempoRestante !== "agotado" && ( <> )} } ); } //IO