import { motion, AnimatePresence } from 'framer-motion' import ReactMarkdown from 'react-markdown' import remarkGfm from 'remark-gfm' import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, BarChart, Bar, Legend } from 'recharts' import { Button } from '@/components/ui/button' import { Brain, TrendingUp, Lightbulb, Activity, Globe, Users, Zap, AlertTriangle } from 'lucide-react' // Mappage des icônes const iconMap = { trending: TrendingUp, globe: Globe, users: Users, activity: Activity, zap: Zap, peak: Activity } const WidgetFactory = ({ widget, chartsData, themeColor }) => { const Icon = iconMap[widget.icon] || Activity switch (widget.type) { case 'header_section': return (

{widget.title}

{widget.content}
) case 'kpi_grid': return (
{widget.items.map((item, idx) => { const ItemIcon = iconMap[item.icon] || Activity return (

{item.label}

{item.value}

) })}
) case 'chart_section': { const isEvolution = widget.chart_type === 'evolution' const data = isEvolution ? chartsData.evolution : chartsData.top_countries return (

{isEvolution ? : }
{widget.title}

{isEvolution ? ( ) : ( )}

"{widget.commentary}"

) } case 'insight_cards': return (

{widget.title}

{widget.items.map((insight, idx) => (

{insight}

))}
) case 'text_section': return (

{widget.title}

{widget.content}
) default: return null } } const DatasetAnalysis = ({ dataset, analysisData, onBack }) => { const { analysis, charts_data } = analysisData // Extraire la couleur du thème (par défaut green-700) const themeColor = analysis.theme_color ? analysis.theme_color.split('-')[0] + '-600' : 'primary' // Style CSS variable pour les graphiques const style = { [`--color-primary`]: '#166534', [`--color-emerald-600`]: '#059669', [`--color-blue-600`]: '#2563eb', [`--color-red-600`]: '#dc2626', [`--color-green-600`]: '#16a34a', } return ( {/* Header Premium avec Mesh Gradient */}
Intelligence Artificielle
Rapport Stratégique

{analysis.report_title || dataset.title}

Analyse scientifique approfondie générée pour {dataset.source_name}.

Gemini 2.5 Live
{/* Rendu dynamique des widgets */} {analysis.layout ? ( analysis.layout.map((widget, idx) => ( )) ) : (

Format non reconnu

Veuillez régénérer l'analyse pour corriger ce problème.

)}
) } export default DatasetAnalysis