import React, { useState, useEffect } from 'react'; import { extendDemoSession, destroyDemoSession } from '../../../api/services/demo'; import { apiClient } from '../../../api/client'; import { useNavigate } from 'react-router-dom'; export const DemoBanner: React.FC = () => { const navigate = useNavigate(); const [isDemo, setIsDemo] = useState(false); const [expiresAt, setExpiresAt] = useState(null); const [timeRemaining, setTimeRemaining] = useState(''); const [canExtend, setCanExtend] = useState(true); const [extending, setExtending] = useState(false); useEffect(() => { const demoMode = localStorage.getItem('demo_mode') === 'true'; const expires = localStorage.getItem('demo_expires_at'); setIsDemo(demoMode); setExpiresAt(expires); if (demoMode && expires) { const interval = setInterval(() => { const now = new Date().getTime(); const expiryTime = new Date(expires).getTime(); const diff = expiryTime - now; if (diff <= 0) { setTimeRemaining('Sesión expirada'); handleExpiration(); } else { const minutes = Math.floor(diff / 60000); const seconds = Math.floor((diff % 60000) / 1000); setTimeRemaining(`${minutes}:${seconds.toString().padStart(2, '0')}`); } }, 1000); return () => clearInterval(interval); } }, [expiresAt]); const handleExpiration = () => { localStorage.removeItem('demo_mode'); localStorage.removeItem('demo_session_id'); localStorage.removeItem('demo_account_type'); localStorage.removeItem('demo_expires_at'); apiClient.setDemoSessionId(null); navigate('/demo'); }; const handleExtendSession = async () => { const sessionId = apiClient.getDemoSessionId(); if (!sessionId) return; setExtending(true); try { const updatedSession = await extendDemoSession({ session_id: sessionId }); localStorage.setItem('demo_expires_at', updatedSession.expires_at); setExpiresAt(updatedSession.expires_at); if (updatedSession.remaining_extensions === 0) { setCanExtend(false); } } catch (error) { console.error('Error extending session:', error); alert('No se pudo extender la sesión'); } finally { setExtending(false); } }; const handleEndSession = async () => { const sessionId = apiClient.getDemoSessionId(); if (!sessionId) return; if (confirm('¿Estás seguro de que quieres terminar la sesión demo?')) { try { await destroyDemoSession({ session_id: sessionId }); } catch (error) { console.error('Error destroying session:', error); } finally { handleExpiration(); } } }; if (!isDemo) return null; return (
Modo Demo
Tiempo restante: {timeRemaining}
{canExtend && ( )}
); }; export default DemoBanner;