"use client"; import { useEffect, useState } from "react"; import { usePathname } from "next/navigation"; import { X, Database, Minimize2, Maximize2, Clock, CircleDot, Layout, RefreshCw, Globe, } from "lucide-react"; import { CacheType } from "@/lib/services/base-api.service"; import { useTranslation } from "react-i18next"; interface RequestTiming { url: string; startTime: number; endTime: number; duration: number; timestamp: string; fromCache: boolean; cacheType?: CacheType; mongoAccess?: { operation: string; duration: number; }; pageRender?: { page: string; }; } function formatTime(timestamp: string) { const date = new Date(timestamp); return date.toLocaleTimeString("fr-FR", { hour: "2-digit", minute: "2-digit", second: "2-digit", }); } function formatDuration(duration: number) { return Math.round(duration); } export function DebugInfo() { const [logs, setLogs] = useState([]); const [isMinimized, setIsMinimized] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false); const pathname = usePathname(); const { t } = useTranslation(); const fetchLogs = async () => { try { setIsRefreshing(true); const response = await fetch("/api/debug"); if (response.ok) { const data = await response.json(); setLogs(data); } } catch (error) { console.error("Erreur lors de la récupération des logs:", error); } finally { setIsRefreshing(false); } }; // Rafraîchir les logs au montage et à chaque changement de page useEffect(() => { fetchLogs(); }, [pathname]); // Rafraîchir les logs périodiquement si la fenêtre n'est pas minimisée useEffect(() => { if (isMinimized) return; const interval = setInterval(() => { fetchLogs(); }, 5000); // Rafraîchir toutes les 5 secondes return () => clearInterval(interval); }, [isMinimized]); const clearLogs = async () => { try { await fetch("/api/debug", { method: "DELETE" }); setLogs([]); } catch (error) { console.error("Erreur lors de la suppression des logs:", error); } }; const sortedLogs = [...logs].reverse(); return (

{t("debug.title")}

{!isMinimized && ( {sortedLogs.length} {t("debug.entries", { count: sortedLogs.length })} )}
{!isMinimized && (
{sortedLogs.length === 0 ? (

{t("debug.noRequests")}

) : ( sortedLogs.map((log, index) => (
{log.fromCache && (
)} {log.mongoAccess && (
)} {log.pageRender && (
)} {!log.fromCache && !log.mongoAccess && !log.pageRender && (
)} {log.url}
{formatTime(log.timestamp)}
{formatDuration(log.duration)}ms {log.mongoAccess && ( +{formatDuration(log.mongoAccess.duration)}ms )}
{log.mongoAccess && (
)}
)) )}
)}
); }