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 (
{widget.title}
{isEvolution ? (
) : (
)}
)
}
case 'insight_cards':
return (
{widget.title}
{widget.items.map((insight, idx) => (
))}
)
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}.
{/* 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