"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 && (
)}
{/* Execute Scan Footer */}
);
}