'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { Button, Input, Label, Card, CardContent, CardHeader, CardTitle, cn } from '@horux/shared-ui'; import { useAuthStore } from '@/stores/auth-store'; import { apiClient } from '@/lib/api/client'; import { CheckCircle2, Server, Cloud, ArrowLeft, Clock, Zap } from 'lucide-react'; type VerticalProfile = 'CONTABLE' | 'JURIDICO' | 'ARQUITECTURA'; type PlanType = 'trial' | 'business_control' | 'business_cloud' | 'mi_empresa' | 'mi_empresa_plus'; type Frequency = 'monthly' | 'annual'; export default function RegisterDespachoPage() { const router = useRouter(); const { setUser, setTokens } = useAuthStore(); const [step, setStep] = useState(1); const [verticalProfile, setVerticalProfile] = useState(null); const [selectedPlan, setSelectedPlan] = useState(null); const [meFreq, setMeFreq] = useState('monthly'); const [mePlusFreq, setMePlusFreq] = useState('monthly'); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [form, setForm] = useState({ despachoNombre: '', ownerNombre: '', ownerEmail: '', ownerPassword: '', acceptedTerms: false, }); const handleChange = (field: string) => (e: React.ChangeEvent) => { setForm((prev) => ({ ...prev, [field]: e.target.value })); setError(''); }; const handleSubmit = async () => { if (!form.acceptedTerms) { setError('Debes aceptar los términos y condiciones'); return; } if (!verticalProfile || !selectedPlan) { setError('Completa todos los pasos'); return; } setLoading(true); setError(''); try { const frequency: Frequency | undefined = selectedPlan === 'mi_empresa' ? meFreq : selectedPlan === 'mi_empresa_plus' ? mePlusFreq : undefined; const { data } = await apiClient.post('/despachos/signup', { despacho: { nombre: form.despachoNombre, verticalProfile, plan: selectedPlan, frequency, }, owner: { nombre: form.ownerNombre, email: form.ownerEmail, password: form.ownerPassword, }, }); setTokens(data.accessToken, data.refreshToken); setUser(data.user); // If paid plan with payment URL, redirect to MercadoPago if (data.paymentUrl) { window.location.href = data.paymentUrl; } else { router.push('/onboarding'); } } catch (err: any) { setError(err.response?.data?.message || 'Error al registrar el despacho'); setStep(1); } finally { setLoading(false); } }; // =================== STEP 1: Registration Form =================== if (step === 1) { const canProceed = form.despachoNombre && form.ownerNombre && form.ownerEmail && form.ownerPassword.length >= 10 && form.acceptedTerms; return (
1 2 3
Crea tu cuenta

Plataforma para despachos profesionales

setForm((p) => ({ ...p, acceptedTerms: e.target.checked }))} className="mt-1" />
{error &&

{error}

}

¿Ya tienes cuenta? Inicia sesión

); } // =================== STEP 2: Vertical Selection =================== if (step === 2) { return (
2 3

¿Qué tipo de despacho eres?

Selecciona tu área profesional

⚖️

Jurídico

Próximamente

🏗️

Arquitectura

Próximamente

); } // =================== STEP 3: Subscription Selection =================== return (
3

Elige tu plan

Mi Empresa para individuales, Business para despachos.

{/* Trial Gratuito */} setSelectedPlan('trial')} >
Trial Gratuito

Prueba sin compromiso

$0

por 30 días

Sin tarjeta de crédito

Hasta 3 RFCs
20 timbres incluidos
Todas las funcionalidades
Base de datos en la nube
{/* Mi Empresa */} setSelectedPlan('mi_empresa')} >
Mi Empresa

Para una sola empresa

${meFreq === 'monthly' ? '580' : '5,800'}

{meFreq === 'monthly' ? 'por mes (IVA incluido)' : 'por año (IVA incluido)'}

{meFreq === 'monthly' &&

o $5,800/año (ahorras 17%)

}
1 RFC
3 usuarios
Hasta 1,000,000 CFDIs
Base de datos en la nube
Dashboard, CFDI, IVA/ISR, alertas
50 timbres/mes incluidos
{/* Mi Empresa + */} setSelectedPlan('mi_empresa_plus')} >
Más popular
Mi Empresa +

Con API y Lolita IA

${mePlusFreq === 'monthly' ? '900' : '9,000'}

{mePlusFreq === 'monthly' ? 'por mes (IVA incluido)' : 'por año (IVA incluido)'}

{mePlusFreq === 'monthly' &&

o $9,000/año (ahorras 17%)

}
1 RFC
3 usuarios
Hasta 1,000,000 CFDIs
Base de datos en la nube
Dashboard, CFDI, IVA/ISR, alertas
50 timbres/mes incluidos
API REST incluida
Lolita IA agente fiscal
{/* Business Control */} setSelectedPlan('business_control')} >
Business Control

Tu servidor, tus datos

$25,850

por año (IVA incluido)

+ $45/mes por cada RFC adicional sobre 100

Hasta 100 RFCs
Usuarios ilimitados
Hasta 1,000,000 CFDIs por contribuyente
Servidor local con backup
Control total de tus datos
Dashboard, CFDI, IVA/ISR, alertas, calendario
Reportes, conciliación, documentos, facturación, API
{/* Enterprise (business_cloud) */} setSelectedPlan('business_cloud')} >
Enterprise

Despachos grandes con alto volumen

$43,000

por año (IVA incluido)

+ $45/mes por cada RFC adicional sobre 100

Hasta 100 RFCs
Usuarios ilimitados
Hasta 3,000,000 CFDIs por contribuyente
Servidor local con backup
Backups automáticos en la nube
Dashboard, CFDI, IVA/ISR, alertas, calendario
Reportes, conciliación, documentos, facturación, API
Soporte prioritario
{error &&

{error}

}
); }