"use client"; import { useState } from "react"; import { FeatureStat } from "@/lib/edge/dataset-profile"; import { AlertTriangle, CheckCircle, BarChart3, Layers } from "lucide-react"; interface FeatureDistributionChartProps { featureStats: FeatureStat[]; } const FEATURE_SHORT_LABELS: Record = { "Heart Rate (bpm)": "Heart Rate", "SpO2 Level (%)": "SpO2 Oxygen", "Systolic Blood Pressure (mmHg)": "Systolic BP", "Diastolic Blood Pressure (mmHg)": "Diastolic BP", "Body Temperature (°C)": "Body Temp", "Data Accuracy (%)": "Data Accuracy", }; export default function FeatureDistributionChart({ featureStats, }: FeatureDistributionChartProps) { const [selectedKey, setSelectedKey] = useState( featureStats[0]?.key || "Heart Rate (bpm)" ); const [hoveredBinIndex, setHoveredBinIndex] = useState(null); const currentFeature = featureStats.find((f) => f.key === selectedKey) || featureStats[0]; if (!currentFeature) return null; const maxBinCount = Math.max(...currentFeature.bins.map((b) => b.count), 1); return (
{/* Feature Selector Tabs */}
SELECT CLINICAL FEATURE FOR DISTRIBUTION ANALYSIS
{featureStats.map((feat) => { const isSelected = feat.key === selectedKey; const displayLabel = FEATURE_SHORT_LABELS[feat.key] || feat.name; return ( ); })}
{/* Feature Header & Descriptive Metrics Ribbon */}

{currentFeature.name}

{currentFeature.unit}

{currentFeature.desc} · Calibrated across 60,000 verified observations

Normal: {currentFeature.normal_range}
{/* 6 Metric Badges */}
Mean (μ)
{currentFeature.mean} {currentFeature.unit}
Std Dev (σ)
±{currentFeature.std} {currentFeature.unit}
Median (Q50)
{currentFeature.median} {currentFeature.unit}
IQR [Q25 – Q75]
{currentFeature.q25} – {currentFeature.q75}
Min Value
{currentFeature.min} {currentFeature.unit}
Max Value
{currentFeature.max} {currentFeature.unit}
{/* Distribution Histogram Bar Chart */}
12-Bin Frequency Histogram (N = 60,000 Records)
{hoveredBinIndex !== null ? `Bin ${hoveredBinIndex + 1}: ${currentFeature.bins[hoveredBinIndex].label} ${currentFeature.unit} → ${currentFeature.bins[hoveredBinIndex].count.toLocaleString()} patients (${currentFeature.bins[hoveredBinIndex].pct}%)` : "Hover bars for observation count & frequency"}
{/* Histogram Bars Container */}
{currentFeature.bins.map((bin, bIdx) => { const heightPct = Math.round((bin.count / maxBinCount) * 100); const isAbnormal = bin.max < currentFeature.normal_min || bin.min > currentFeature.normal_max; const isHovered = hoveredBinIndex === bIdx; return (
setHoveredBinIndex(bIdx)} onMouseLeave={() => setHoveredBinIndex(null)} className="flex-1 flex flex-col items-center h-full justify-end group cursor-pointer relative" > {/* Tooltip on Hover */} {isHovered && (
{bin.count.toLocaleString()} Patients
{bin.pct}% of total
)} {/* Percentage label above top bars */} {bin.pct}% {Math.round(bin.pct)}% {/* The Bar */}
{/* Bin Label */} {bin.min}
); })}
{/* Chart Sub-Legend */}
Normal Physiological Range Abnormal Trigger / Critical Zone
{currentFeature.alert}
{/* Disease Subgroup Comparative Mean Breakdown */}
CROSS-DIAGNOSTIC COMPARISON

{currentFeature.name} Across Diagnostic Cohorts

Cohort Mean vs Baseline
{Object.entries(currentFeature.means_by_disease).map(([disease, val]) => { const isCritical = (currentFeature.key.includes("Heart Rate") && disease === "Heart Disease") || (currentFeature.key.includes("Systolic") && (disease === "Hypertension" || disease === "Heart Disease")) || (currentFeature.key.includes("SpO2") && disease === "Asthma"); return (
{disease}
{val}{" "} {currentFeature.unit}
Cohort Deviation: currentFeature.mean ? "text-hazard" : "text-slate" }`} > {val > currentFeature.mean ? `+${(val - currentFeature.mean).toFixed(1)}` : (val - currentFeature.mean).toFixed(1)}
); })}
); }