import { useEffect, useState } from 'react' import { useQuery } from '@tanstack/react-query' import { useNavigate } from '@tanstack/react-router' import { Loader2 } from 'lucide-react' import type { ConnectPaymentResult, OnboardingGroupDto } from '@gruperly/shared' import { Logo, LogoIcon } from '../components/brand' import { ConfirmationStep, FirstGroupStep, PaymentStep, Stepper, WelcomeStep, } from '../components/onboarding' import { PAYMENT_PROVIDERS } from '../components/onboarding/constants' import { Button } from '../components/ui' import { useAuth } from '../context/AuthProvider' import { getOnboardingStatus } from '../lib/api' const STEPS = [ { label: 'Bienvenida' }, { label: 'Cobros' }, { label: 'Tu grupo' }, { label: 'Listo' }, ] export function OnboardingView() { const { user, isPending: authPending } = useAuth() const navigate = useNavigate() const [step, setStep] = useState(0) const [paymentResult, setPaymentResult] = useState(null) const [createdGroup, setCreatedGroup] = useState(null) const statusQuery = useQuery({ queryKey: ['onboarding', 'status'], queryFn: getOnboardingStatus, enabled: !!user, }) useEffect(() => { const status = statusQuery.data if (!status) return if (status.completed) { void navigate({ to: '/' }) return } // Si interrumpió después de conectar el cobro, retomamos en el paso del grupo. if (status.step === 'PAYMENT_CONNECTED') { setStep((current) => (current === 0 ? 2 : current)) } }, [statusQuery.data, navigate]) if (authPending) { return (
) } if (!user) { return (

Tu cuenta, lista

Iniciá sesión para configurar tus cobros y crear tu primer grupo.

) } if (statusQuery.isPending) { return (
) } const firstName = user.name?.trim().split(/\s+/)[0] ?? 'profesor/a' const providerName = paymentResult ? PAYMENT_PROVIDERS.find((p) => p.value === paymentResult.provider)?.name : undefined return (
{step === 0 ? ( setStep(1)} /> ) : null} {step === 1 ? ( { setPaymentResult(result) setStep(2) }} onBack={() => setStep(0)} /> ) : null} {step === 2 ? ( setStep(1)} onCompleted={(group) => { setCreatedGroup(group) setStep(3) }} /> ) : null} {step === 3 && createdGroup ? ( ) : null}
) }