"use client"; import React from "react"; import { BarChart2, Target, ShieldAlert, Zap, Info, Activity, ArrowUpRight, } from "lucide-react"; import { Badge } from "../ui/badge"; import { Sparkline } from "./Sparkline"; import { CityDetail } from "../../lib/types"; interface AnalyticsPanelProps { data: CityDetail; t?: any; // Optional translations } export function AnalyticsPanel({ data, t = {}, // Default empty for now, can be expanded via context or props }: AnalyticsPanelProps) { const { overview, market_scan, models, ai_analysis } = data; const modelEntries = Object.entries(models) .filter(([_, v]) => v !== undefined && v !== null) .map(([label, value]) => ({ label, value: value as number })) .sort((a, b) => b.value - a.value); const signalColor = market_scan.signal_label === "BUY YES" ? "border-emerald-500/30 bg-emerald-500/5 text-emerald-400" : market_scan.signal_label === "BUY NO" ? "border-rose-500/30 bg-rose-500/5 text-rose-400" : "border-zinc-800 bg-zinc-900/50 text-zinc-400"; const signalIconColor = market_scan.signal_label === "BUY YES" ? "text-emerald-500" : market_scan.signal_label === "BUY NO" ? "text-rose-500" : "text-zinc-500"; return (
{/* Header Stat Area */}

{t.marketAnalysis || "MARKET ANALYSIS"}

{t.realTime || "LIVE UPLINK"}
{t.liveMetar || "REAL-TIME METAR"}
{overview.current_temp?.toFixed(1) || "--"} {overview.temp_symbol}
{t.ensembleDeb || "ENSEMBLE DEB"}
{overview.deb_prediction?.toFixed(1) || "--"} {overview.temp_symbol}
{/* Trade Execution Signal */}
{t.signalStrategy || "SIGNAL STRATEGY"}
{market_scan.signal_label}
{t.confidence || "CONFIDENCE"}
{market_scan.confidence}
0 ? market_scan.sparkline : [1, 1, 1] } width={360} height={35} color={ market_scan.signal_label === "BUY YES" ? "#10b981" : market_scan.signal_label === "BUY NO" ? "#f43f5e" : "#52525b" } />
{/* Probability & Market Pricing */}
{t.yieldArbitrage || "YIELD ARBITRAGE"}
{t.probComparison || "PROB COMPARISON"} {t.predictionGap || "GAP"}:{" "} {market_scan.edge_percent?.toFixed(1) || "0.0"}%
{/* Visual Probability Bar */}
{t.marketPriceLabel || "MIDPOINT"} ${market_scan.market_price?.toFixed(2) || "--"}
{t.modelProbLabel || "MODEL PROB"} {((market_scan.model_probability || 0) * 100).toFixed(1)}%
{t.multiModelDivergence || "MULTI-MODEL DIVERGENCE"}
{modelEntries.map((m) => (
{m.label} {m.value.toFixed(1)}°
25 ? "bg-rose-500 shadow-[0_0_8px_rgba(244,63,94,0.5)]" : m.value > 15 ? "bg-amber-500" : "bg-cyan-500 shadow-[0_0_8px_rgba(34,211,238,0.5)]" }`} style={{ width: `${(m.value / 40) * 100}%` }} />
))}
{ai_analysis && (
AI COGNITIVE ANALYSIS

{ai_analysis}

)}
{/* Execute Scan Footer */}
); }