import { useNavigate } from '@tanstack/react-router' import type { AIGenerateSubjectInput } from '@/data' import type { NewSubjectWizardState } from '@/features/asignaturas/nueva/types' import { Button } from '@/components/ui/button' import { useGenerateSubjectAI } from '@/data' export function WizardControls({ wizard, setWizard, errorMessage, onPrev, onNext, disablePrev, disableNext, disableCreate, isLastStep, }: { wizard: NewSubjectWizardState setWizard: React.Dispatch> errorMessage?: string | null onPrev: () => void onNext: () => void disablePrev: boolean disableNext: boolean disableCreate: boolean isLastStep: boolean }) { const navigate = useNavigate() const generateSubjectAI = useGenerateSubjectAI() const handleCreate = async () => { setWizard((w) => ({ ...w, isLoading: true, errorMessage: null, })) try { if (wizard.tipoOrigen === 'IA') { const aiInput: AIGenerateSubjectInput = { plan_estudio_id: wizard.plan_estudio_id, datosBasicos: { nombre: wizard.datosBasicos.nombre, codigo: wizard.datosBasicos.codigo, tipo: wizard.datosBasicos.tipo!, creditos: wizard.datosBasicos.creditos!, horasIndependientes: wizard.datosBasicos.horasIndependientes, horasAcademicas: wizard.datosBasicos.horasAcademicas, estructuraId: wizard.datosBasicos.estructuraId!, }, iaConfig: { descripcionEnfoqueAcademico: wizard.iaConfig!.descripcionEnfoqueAcademico, instruccionesAdicionalesIA: wizard.iaConfig!.instruccionesAdicionalesIA, archivosReferencia: wizard.iaConfig!.archivosReferencia, repositoriosReferencia: wizard.iaConfig!.repositoriosReferencia || [], archivosAdjuntos: wizard.iaConfig!.archivosAdjuntos || [], }, } console.log( `${new Date().toISOString()} - Enviando a generar asignatura con IA`, ) const asignatura = await generateSubjectAI.mutateAsync(aiInput) console.log( `${new Date().toISOString()} - Asignatura IA generada`, asignatura, ) navigate({ to: `/planes/${wizard.plan_estudio_id}/asignaturas/${asignatura.id}`, state: { showConfetti: true }, }) return } } catch (err: any) { setWizard((w) => ({ ...w, isLoading: false, errorMessage: err?.message ?? 'Error creando la asignatura', })) } finally { setWizard((w) => ({ ...w, isLoading: false })) } } return (
{(errorMessage ?? wizard.errorMessage) && ( {errorMessage ?? wizard.errorMessage} )}
{isLastStep ? ( ) : ( )}
) }