// components/SinglePageDataRequestIntegrated.tsx // Versión integrada con DataInputRedesigned + Dashboard actual import React, { useState } from 'react'; import { motion } from 'framer-motion'; import { Toaster } from 'react-hot-toast'; import { TierKey, AnalysisData } from '../types'; import TierSelectorEnhanced from './TierSelectorEnhanced'; import DataInputRedesigned from './DataInputRedesigned'; import DashboardReorganized from './DashboardReorganized'; import { generateAnalysis } from '../utils/analysisGenerator'; import toast from 'react-hot-toast'; import { useAuth } from '../utils/AuthContext'; const SinglePageDataRequestIntegrated: React.FC = () => { const [selectedTier, setSelectedTier] = useState('silver'); const [view, setView] = useState<'form' | 'dashboard'>('form'); const [analysisData, setAnalysisData] = useState(null); const [isAnalyzing, setIsAnalyzing] = useState(false); const handleTierSelect = (tier: TierKey) => { setSelectedTier(tier); }; const { authHeader, logout } = useAuth(); const handleAnalyze = (config: { costPerHour: number; avgCsat: number; segmentMapping?: { high_value_queues: string[]; medium_value_queues: string[]; low_value_queues: string[]; }; file?: File; sheetUrl?: string; useSynthetic?: boolean; }) => { console.log('🚀 handleAnalyze called with config:', config); console.log('🎯 Selected tier:', selectedTier); console.log('📄 File:', config.file); console.log('🔗 Sheet URL:', config.sheetUrl); console.log('✨ Use Synthetic:', config.useSynthetic); // Validar que hay datos if (!config.file && !config.sheetUrl && !config.useSynthetic) { toast.error('Por favor, sube un archivo, introduce una URL o genera datos sintéticos.'); return; } // 🔐 Si usamos CSV real, exigir estar logado if (config.file && !config.useSynthetic && !authHeader) { toast.error('Debes iniciar sesión para analizar datos reales.'); return; } setIsAnalyzing(true); toast.loading('Generando análisis...', { id: 'analyzing' }); setTimeout(async () => { console.log('⏰ Generating analysis...'); try { const data = await generateAnalysis( selectedTier, config.costPerHour, config.avgCsat, config.segmentMapping, config.file, config.sheetUrl, config.useSynthetic, authHeader || undefined ); console.log('✅ Analysis generated successfully'); setAnalysisData(data); setIsAnalyzing(false); toast.dismiss('analyzing'); toast.success('¡Análisis completado!', { icon: '🎉' }); setView('dashboard'); // Scroll to top window.scrollTo({ top: 0, behavior: 'smooth' }); } catch (error) { console.error('❌ Error generating analysis:', error); setIsAnalyzing(false); toast.dismiss('analyzing'); const msg = (error as Error).message || ''; if (msg.includes('401')) { toast.error('Sesión caducada o credenciales incorrectas. Vuelve a iniciar sesión.'); logout(); } else { toast.error('Error al generar el análisis: ' + msg); } } }, 1500); }; const handleBackToForm = () => { setView('form'); setAnalysisData(null); window.scrollTo({ top: 0, behavior: 'smooth' }); }; // Dashboard view if (view === 'dashboard' && analysisData) { console.log('📊 Rendering dashboard with data:', analysisData); console.log('📊 Heatmap data length:', analysisData.heatmapData?.length); console.log('📊 Dimensions length:', analysisData.dimensions?.length); try { return ; } catch (error) { console.error('❌ Error rendering dashboard:', error); return (

Error al renderizar dashboard

{(error as Error).message}

); } } // Form view return ( <>
{/* Header */}

Beyond Diagnostic

Análisis de Readiness Agéntico para Contact Centers

{/* Tier Selection */}

Selecciona tu Tier de Análisis

Elige el nivel de profundidad que necesitas para tu diagnóstico

{/* Data Input - Using redesigned component */}
); }; export default SinglePageDataRequestIntegrated;