"use client"; import { useState, useEffect } from "react"; import { TYPE_COLORS, LEVEL_COLORS, PROVIDER_COLORS, getProxyStatusStyle as getStatusStyle, } from "@/shared/constants/colors"; import { formatDuration as formatLatency } from "@/shared/utils/formatting"; /** * Proxy log detail modal — shows full proxy event metadata, error info, and config. * Extracted from ProxyLogger.js for maintainability. */ export default function ProxyLogDetail({ log, onClose }) { useEffect(() => { const handler = (e) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", handler); return () => window.removeEventListener("keydown", handler); }, [onClose]); const statusStyle = getStatusStyle(log.status); const typeColor = TYPE_COLORS[log.proxy?.type] || { bg: "#6B7280", text: "#fff", label: log.proxy?.type || "-", }; const levelColor = LEVEL_COLORS[log.level] || LEVEL_COLORS.direct; const providerColor = PROVIDER_COLORS[log.provider] || { bg: "#374151", text: "#fff", label: (log.provider || "-").toUpperCase(), }; const formatDate = (iso) => { try { const d = new Date(iso); return ( d.toLocaleDateString("pt-BR") + ", " + d.toLocaleTimeString("en-US", { hour12: false }) ); } catch { return iso; } }; return (
e.stopPropagation()} > {/* Header */}
{log.status} Proxy Event
{/* Metadata Grid */}
Time
{formatDate(log.timestamp)}
Latency
{formatLatency(log.latencyMs)}
Public IP
{log.publicIp || "—"}
Proxy
{log.proxy ? `${log.proxy.type}://${log.proxy.host}:${log.proxy.port}` : "Direct"}
Type
{typeColor.label}
Level
{levelColor.label}
Provider
{log.provider ? ( {providerColor.label} ) : (
)}
TLS Fingerprint
{log.tlsFingerprint ? ( 🔒 Chrome 124 ) : (
Direct (native)
)}
Target URL
{log.targetUrl || "—"}
{/* Error */} {log.error && (
Error
{log.error}
)} {/* Proxy Config Details */} {log.proxy && (
Proxy Configuration
                {JSON.stringify(log.proxy, null, 2)}
              
)}
); }