import * as Icons from 'lucide-react' import type { NewSubjectWizardState } from '@/features/asignaturas/nueva/types' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { usePlan, usePlanLineas, useSubjectEstructuras } from '@/data' import { formatFileSize } from '@/features/planes/utils/format-file-size' export function PasoResumenCard({ wizard }: { wizard: NewSubjectWizardState }) { const { data: plan } = usePlan(wizard.plan_estudio_id) const { data: estructuras } = useSubjectEstructuras() const { data: lineasPlan } = usePlanLineas(wizard.plan_estudio_id) const estructuraNombre = (() => { const estructuraId = wizard.datosBasicos.estructuraId if (!estructuraId) return '—' const hit = estructuras?.find((e) => e.id === estructuraId) return hit?.nombre ?? estructuraId })() const modoLabel = (() => { if (wizard.tipoOrigen === 'MANUAL') return 'Manual (Vacía)' if (wizard.tipoOrigen === 'IA') return 'Generada con IA' if (wizard.tipoOrigen === 'IA_SIMPLE') return 'Generada con IA (Simple)' if (wizard.tipoOrigen === 'IA_MULTIPLE') return 'Generación múltiple (IA)' if (wizard.tipoOrigen === 'CLONADO_INTERNO') return 'Clonada (Sistema)' if (wizard.tipoOrigen === 'CLONADO_TRADICIONAL') return 'Clonada (Archivo)' return '—' })() const creditosText = typeof wizard.datosBasicos.creditos === 'number' && Number.isFinite(wizard.datosBasicos.creditos) ? wizard.datosBasicos.creditos.toFixed(2) : '—' const archivosRef = wizard.iaConfig?.archivosReferencia ?? [] const repositoriosRef = wizard.iaConfig?.repositoriosReferencia ?? [] const adjuntos = wizard.iaConfig?.archivosAdjuntos ?? [] const materiasSeleccionadas = wizard.sugerencias.filter((s) => s.selected) const iaMultipleEnfoque = wizard.iaMultiple?.enfoque.trim() ?? '' const iaMultipleCantidad = wizard.iaMultiple?.cantidadDeSugerencias ?? 10 return ( Resumen de creación Verifica los datos antes de crear la asignatura.
Plan de estudios: {plan?.nombre || wizard.plan_estudio_id || '—'}
{plan?.carreras?.nombre ? (
Carrera: {plan.carreras.nombre}
) : null}
Tipo de origen: {wizard.tipoOrigen === 'MANUAL' && ( )} {(wizard.tipoOrigen === 'IA' || wizard.tipoOrigen === 'IA_SIMPLE' || wizard.tipoOrigen === 'IA_MULTIPLE') && ( )} {(wizard.tipoOrigen === 'CLONADO_INTERNO' || wizard.tipoOrigen === 'CLONADO_TRADICIONAL') && ( )} {modoLabel}
{wizard.tipoOrigen === 'IA_MULTIPLE' ? ( <>
Configuración
Se crearán {materiasSeleccionadas.length} asignatura(s) a partir de tus selecciones.
Estructura
{estructuraNombre}
Materias seleccionadas
{materiasSeleccionadas.length} en total
{materiasSeleccionadas.length === 0 ? (
No hay materias seleccionadas.
) : (
{materiasSeleccionadas.map((m) => { const lineaNombre = m.linea_plan_id ? (lineasPlan?.find((l) => l.id === m.linea_plan_id) ?.nombre ?? m.linea_plan_id) : '—' const cicloText = typeof m.numero_ciclo === 'number' && Number.isFinite(m.numero_ciclo) ? String(m.numero_ciclo) : '—' return (
{m.nombre}
Línea: {lineaNombre} Ciclo: {cicloText}
{m.descripcion || '—'}
) })}
)}
) : ( <>
Nombre: {wizard.datosBasicos.nombre || '—'}
Código: {wizard.datosBasicos.codigo || '—'}
Tipo: {wizard.datosBasicos.tipo || '—'}
Créditos: {creditosText}
Estructura: {estructuraNombre}
Horas académicas:{' '} {wizard.datosBasicos.horasAcademicas ?? '—'}
Horas independientes:{' '} {wizard.datosBasicos.horasIndependientes ?? '—'}
Configuración IA
Enfoque académico:{' '} {wizard.iaConfig?.descripcionEnfoqueAcademico || '—'}
Instrucciones adicionales:{' '} {wizard.iaConfig?.instruccionesAdicionalesIA || '—'}
Archivos de referencia
{archivosRef.length ? (
    {archivosRef.map((id) => (
  • {id}
  • ))}
) : (
)}
Repositorios de referencia
{repositoriosRef.length ? (
    {repositoriosRef.map((id) => (
  • {id}
  • ))}
) : (
)}
Archivos adjuntos
{adjuntos.length ? (
    {adjuntos.map((f) => (
  • {f.file.name} {' '} · {formatFileSize(f.file.size)}
  • ))}
) : (
)}
)}
) }