import React, { useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import { Sparkles, Brain, Zap, Heart, Eye, TrendingUp, AlertTriangle, CheckCircle } from 'lucide-react';
interface NeuroScoreProps {
analysis: {
scores: {
dopamine: number;
serotonin: number;
cognitiveEase: number;
commercialFit: number;
};
feedback: string[];
improvements: {
dopamine: string[];
serotonin: string[];
cognitiveEase: string[];
commercialFit: string[];
};
prediction: string;
} | null;
loading?: boolean;
onApplyImprovement?: (suggestion: string) => void;
}
const ScoreBar = ({ label, score, icon: Icon, color, barColor, onClick, isSelected }: { label: string; score: number; icon: any; color: string; barColor: string, onClick?: () => void, isSelected?: boolean }) => (
{label}
= 8 ? 'text-green-400' : score >= 5 ? 'text-yellow-400' : 'text-red-400'}`}>
{score}/10
{isSelected && (
Viewing fixes for this metric...
)}
);
const NeuroScorecard: React.FC = ({ analysis, loading, onApplyImprovement }) => {
const [selectedMetric, setSelectedMetric] = useState(null);
// Get fixes based on selection or aggregate all
const currentImprovements = React.useMemo(() => {
if (!analysis?.improvements) return [];
// Map UI labels to API keys
const keyMap: Record = {
'Dopamine': 'dopamine',
'Serotonin': 'serotonin',
'Cognitive Ease': 'cognitiveEase',
'Commercial Fit': 'commercialFit'
};
if (selectedMetric && keyMap[selectedMetric]) {
return analysis.improvements[keyMap[selectedMetric]] || [];
}
// Return all improvements flattened if nothing selected
return [
...analysis.improvements.dopamine,
...analysis.improvements.serotonin,
...analysis.improvements.cognitiveEase,
...analysis.improvements.commercialFit
];
}, [analysis, selectedMetric]);
if (loading) {
return (
Analyzing Neuro-Triggers...
Connecting to Gemini Vision to evaluate Dopamine, Serotonin, and Market Fit.
{[0, 1, 2].map((i) => (
))}
);
}
if (!analysis) return null;
return (
{/* Header */}
Neuro-Scorecard
AI-Predicted Market Performance
{analysis.prediction}
{/* Column 1: Scores */}
Vital Signs
{selectedMetric && (
)}
setSelectedMetric('Dopamine')}
isSelected={selectedMetric === 'Dopamine'}
/>
setSelectedMetric('Serotonin')}
isSelected={selectedMetric === 'Serotonin'}
/>
setSelectedMetric('Cognitive Ease')}
isSelected={selectedMetric === 'Cognitive Ease'}
/>
setSelectedMetric('Commercial Fit')}
isSelected={selectedMetric === 'Commercial Fit'}
/>
{/* Column 2: Improvements */}
{selectedMetric ? `${selectedMetric} Fixes` : 'Critical Fixes'}
{currentImprovements.length > 0 ? (
currentImprovements.map((fix, idx) => (
{fix}
{onApplyImprovement && (
)}
))
) : (
No specific fixes found for this metric.
)}
{/* Column 3: Feedback */}
Winning Traits
{analysis.feedback.map((point, idx) => (
{point}
))}
);
};
export default NeuroScorecard;