import { motion } from 'framer-motion'; import { Zap, Clock, DollarSign, TrendingUp, AlertTriangle, CheckCircle, ArrowRight } from 'lucide-react'; import { WaterfallChart, WaterfallDataPoint } from '../charts/WaterfallChart'; import type { AnalysisData, RoadmapInitiative, RoadmapPhase } from '../../types'; interface RoadmapTabProps { data: AnalysisData; } // Quick Wins Section function QuickWins({ initiatives, economicModel }: { initiatives: RoadmapInitiative[]; economicModel: AnalysisData['economicModel']; }) { // Filter for quick wins (low investment, quick timeline) const quickWins = initiatives .filter(i => i.phase === RoadmapPhase.Automate || i.risk === 'low') .slice(0, 3); if (quickWins.length === 0) { // Create synthetic quick wins from savings breakdown const topSavings = economicModel.savingsBreakdown.slice(0, 3); return (

Quick Wins Identificados

{topSavings.map((saving, idx) => (
{saving.category}

€{saving.amount.toLocaleString()}

{saving.percentage}% del ahorro total

))}
); } return (

Quick Wins

{quickWins.map((initiative) => (
{initiative.name}

{initiative.timeline}

€{initiative.investment.toLocaleString()} inversión

))}
); } // Initiative Card function InitiativeCard({ initiative, delay = 0 }: { initiative: RoadmapInitiative; delay?: number }) { const phaseColors = { [RoadmapPhase.Automate]: 'bg-emerald-100 text-emerald-700 border-emerald-200', [RoadmapPhase.Assist]: 'bg-[#6D84E3]/20 text-[#6D84E3] border-[#6D84E3]/30', [RoadmapPhase.Augment]: 'bg-amber-100 text-amber-700 border-amber-200' }; const riskColors = { low: 'text-emerald-600', medium: 'text-amber-600', high: 'text-red-600' }; return (

{initiative.name}

{initiative.phase}
{initiative.risk && (
Riesgo {initiative.risk === 'low' ? 'Bajo' : initiative.risk === 'medium' ? 'Medio' : 'Alto'}
)}
{initiative.timeline}
€{initiative.investment.toLocaleString()}
{initiative.resources.length > 0 && (
{initiative.resources.slice(0, 3).map((resource, idx) => ( {resource} ))}
)}
); } // Business Case Summary function BusinessCaseSummary({ economicModel }: { economicModel: AnalysisData['economicModel'] }) { return (

Business Case Consolidado

Inversión Total

€{economicModel.initialInvestment.toLocaleString()}

Ahorro Anual

€{economicModel.annualSavings.toLocaleString()}

Payback

{economicModel.paybackMonths} meses

ROI 3 Años

{economicModel.roi3yr}%

{/* Savings Breakdown */}

Desglose de Ahorros:

{economicModel.savingsBreakdown.map((item, idx) => (
{item.category} €{item.amount.toLocaleString()}
{item.percentage}%
))}
); } // Timeline Visual function TimelineVisual({ initiatives }: { initiatives: RoadmapInitiative[] }) { const phases = [ { phase: RoadmapPhase.Automate, label: 'Wave 1: Automatizar', color: 'bg-emerald-500' }, { phase: RoadmapPhase.Assist, label: 'Wave 2: Asistir', color: 'bg-[#6D84E3]' }, { phase: RoadmapPhase.Augment, label: 'Wave 3: Aumentar', color: 'bg-amber-500' } ]; return (

Timeline de Implementación

{/* Timeline line */}
{/* Phases */}
{phases.map((phase, idx) => { const phaseInitiatives = initiatives.filter(i => i.phase === phase.phase); return (
{/* Circle */}
{idx + 1}
{/* Label */}

{phase.label}

{/* Count */}

{phaseInitiatives.length} iniciativa{phaseInitiatives.length !== 1 ? 's' : ''}

); })}
{/* Arrows */}
); } export function RoadmapTab({ data }: RoadmapTabProps) { // Generate waterfall data from economic model const waterfallData: WaterfallDataPoint[] = [ { label: 'Coste Actual', value: data.economicModel.currentAnnualCost, cumulative: data.economicModel.currentAnnualCost, type: 'initial' }, { label: 'Inversión Inicial', value: data.economicModel.initialInvestment, cumulative: data.economicModel.currentAnnualCost + data.economicModel.initialInvestment, type: 'increase' }, ...data.economicModel.savingsBreakdown.map((saving, idx) => ({ label: saving.category, value: saving.amount, cumulative: data.economicModel.currentAnnualCost + data.economicModel.initialInvestment - data.economicModel.savingsBreakdown.slice(0, idx + 1).reduce((sum, s) => sum + s.amount, 0), type: 'decrease' as const })), { label: 'Coste Futuro', value: data.economicModel.futureAnnualCost, cumulative: data.economicModel.futureAnnualCost, type: 'total' } ]; // Group initiatives by phase const automateInitiatives = data.roadmap.filter(i => i.phase === RoadmapPhase.Automate); const assistInitiatives = data.roadmap.filter(i => i.phase === RoadmapPhase.Assist); const augmentInitiatives = data.roadmap.filter(i => i.phase === RoadmapPhase.Augment); return (
{/* Quick Wins */} {/* Timeline Visual */} {/* Waterfall Chart */} {/* Initiatives by Phase */}
{/* Wave 1: Automate */}

Wave 1: Automatizar

{automateInitiatives.length > 0 ? ( automateInitiatives.map((init, idx) => ( )) ) : (

Sin iniciativas en esta fase

)}
{/* Wave 2: Assist */}

Wave 2: Asistir

{assistInitiatives.length > 0 ? ( assistInitiatives.map((init, idx) => ( )) ) : (

Sin iniciativas en esta fase

)}
{/* Wave 3: Augment */}

Wave 3: Aumentar

{augmentInitiatives.length > 0 ? ( augmentInitiatives.map((init, idx) => ( )) ) : (

Sin iniciativas en esta fase

)}
{/* Business Case Summary */}
); } export default RoadmapTab;