import React, { useState, useEffect } from 'react'; import { useNavigate, Link } from 'react-router-dom'; import { PublicLayout } from '../../components/layout'; import { Button } from '../../components/ui'; import { getDemoAccounts, createDemoSession, DemoAccount } from '../../api/services/demo'; import { apiClient } from '../../api/client'; import { Check, Clock, Shield, Play, Zap, ArrowRight, Store, Factory } from 'lucide-react'; import { markTourAsStartPending } from '../../features/demo-onboarding'; export const DemoPage: React.FC = () => { const navigate = useNavigate(); const [demoAccounts, setDemoAccounts] = useState([]); const [loading, setLoading] = useState(true); const [creatingSession, setCreatingSession] = useState(false); const [error, setError] = useState(null); useEffect(() => { const fetchDemoAccounts = async () => { try { const accounts = await getDemoAccounts(); setDemoAccounts(accounts); } catch (err) { setError('Error al cargar las cuentas demo'); console.error('Error fetching demo accounts:', err); } finally { setLoading(false); } }; fetchDemoAccounts(); }, []); const handleStartDemo = async (accountType: string) => { setCreatingSession(true); setError(null); try { const session = await createDemoSession({ demo_account_type: accountType as 'individual_bakery' | 'central_baker', }); console.log('✅ Demo session created:', session); // Store session ID in API client apiClient.setDemoSessionId(session.session_id); // **CRITICAL FIX: Set the virtual tenant ID in API client** // This ensures all API requests include the correct tenant context apiClient.setTenantId(session.virtual_tenant_id); console.log('✅ Set API client tenant ID:', session.virtual_tenant_id); // Store session info in localStorage for UI localStorage.setItem('demo_mode', 'true'); localStorage.setItem('demo_session_id', session.session_id); localStorage.setItem('demo_account_type', accountType); localStorage.setItem('demo_expires_at', session.expires_at); localStorage.setItem('demo_tenant_id', session.virtual_tenant_id); // **CRITICAL FIX: Initialize tenant store with demo tenant** // This ensures useTenantId() returns the correct virtual tenant ID const { useTenantStore } = await import('../../stores/tenant.store'); const demoTenant = { id: session.virtual_tenant_id, name: session.demo_config?.name || `Demo ${accountType}`, business_type: accountType === 'individual_bakery' ? 'bakery' : 'central_baker', business_model: accountType, address: session.demo_config?.address || 'Demo Address', city: session.demo_config?.city || 'Madrid', postal_code: '28001', phone: null, is_active: true, subscription_tier: 'demo', ml_model_trained: false, last_training_date: null, owner_id: 'demo-user', created_at: new Date().toISOString(), }; useTenantStore.getState().setCurrentTenant(demoTenant); console.log('✅ Initialized tenant store with demo tenant:', demoTenant); // Mark tour to start automatically markTourAsStartPending(); // Navigate to setup page to wait for data cloning navigate(`/demo/setup?session=${session.session_id}`); } catch (err: any) { setError(err?.message || 'Error al crear sesión demo'); console.error('Error creating demo session:', err); } finally { setCreatingSession(false); } }; const getAccountIcon = (accountType: string) => { return accountType === 'individual_bakery' ? Store : Factory; }; if (loading) { return (

Cargando cuentas demo...

); } return ( {/* Hero Section */}
Demo Interactiva

Prueba BakeryIA sin compromiso

Explora nuestro sistema con datos reales de panaderías españolas. Elige el tipo de negocio que mejor se adapte a tu caso.

Sin tarjeta de crédito
30 minutos de acceso
Datos aislados y seguros
{error && (
{error}
)} {/* Demo Account Cards */}
{demoAccounts.map((account) => { const Icon = getAccountIcon(account.account_type); return (
{/* Gradient overlay */}
{/* Header */}

{account.name}

{account.business_model}

DEMO
{/* Description */}

{account.description}

{/* Features */} {account.features && account.features.length > 0 && (

Funcionalidades incluidas:

{account.features.map((feature, idx) => (
{feature}
))}
)} {/* Demo Benefits */}
Datos reales en español
Sesión aislada de 30 minutos
Sin necesidad de registro
{/* CTA Button */}
); })}
{/* Footer CTA */}

¿Ya tienes una cuenta?

Inicia sesión aquí
); }; export default DemoPage;