import { FileText, Download, RefreshCw, FileCheck, AlertTriangle, Loader2, } from 'lucide-react' import { useState } from 'react' import type { DocumentoAsignatura, Asignatura, AsignaturaStructure, } from '@/types/asignatura' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { cn } from '@/lib/utils' // import { toast } from 'sonner'; // import { format } from 'date-fns'; // import { es } from 'date-fns/locale'; interface DocumentoSEPTabProps { documento: DocumentoAsignatura | null asignatura: Asignatura estructura: AsignaturaStructure datosGenerales: Record onRegenerate: () => void isRegenerating: boolean } export function DocumentoSEPTab({ documento, asignatura, datosGenerales, estructura, onRegenerate, isRegenerating, }: DocumentoSEPTabProps) { const [showConfirmDialog, setShowConfirmDialog] = useState(false) // Check completeness const camposObligatorios = estructura.campos.filter((c) => c.obligatorio) const camposCompletos = camposObligatorios.filter((c) => datosGenerales[c.id]?.trim(), ) const completeness = Math.round( (camposCompletos.length / camposObligatorios.length) * 100, ) const isComplete = completeness === 100 const handleRegenerate = () => { setShowConfirmDialog(false) onRegenerate() // toast.success('Regenerando documento...'); } return (

Documento SEP

Previsualización del documento oficial para la SEP

{documento?.estado === 'listo' && ( )} ¿Regenerar documento SEP? Se creará una nueva versión del documento con los datos actuales de la asignatura. La versión anterior quedará en el historial. Cancelar Regenerar
{/* Document preview */}
{documento?.estado === 'listo' ? (
{/* Simulated document header */}
Programa de Estudios - {asignatura.clave}
Versión {documento.version}
{/* Document content simulation */}
{/* Header */}

Secretaría de Educación Pública

{asignatura.nombre}

Clave: {asignatura.clave} | Créditos:{' '} {asignatura.creditos || 'N/A'}

{/* Datos de la institución */}

Carrera: {asignatura.carrera}

Facultad: {asignatura.facultad}

Plan de estudios:{' '} {asignatura.planNombre}

{asignatura.ciclo && (

Ciclo: {asignatura.ciclo}

)}
{/* Campos del documento */} {estructura.campos.map((campo) => { const valor = datosGenerales[campo.id] if (!valor) return null return (

{campo.nombre}

{valor}

) })} {/* Footer */}

Documento generado el{' '} {/* format(documento.fechaGeneracion, "d 'de' MMMM 'de' yyyy", { locale: es })*/}

Universidad La Salle

) : documento?.estado === 'generando' ? (

Generando documento...

) : (

No hay documento generado aún

{!isComplete && (
Completa todos los campos obligatorios para generar el documento
)}
)}
{/* Info sidebar */}
{/* Status */} Estado del documento {documento && ( <>
Versión {documento.version}
Generado {/* format(documento.fechaGeneracion, "d MMM yyyy, HH:mm", { locale: es })*/}
Estado {documento.estado === 'listo' && 'Listo'} {documento.estado === 'generando' && 'Generando'} {documento.estado === 'error' && 'Error'}
)}
{/* Completeness */} Completitud de datos
Campos obligatorios {camposCompletos.length}/{camposObligatorios.length}

{completeness === 100 ? 'Todos los campos obligatorios están completos' : `Faltan ${camposObligatorios.length - camposCompletos.length} campos por completar`}

{/* Missing fields */} {!isComplete && (

Campos faltantes:

{camposObligatorios .filter((c) => !datosGenerales[c.id]?.trim()) .map((campo) => (
{campo.nombre}
))}
)} {/* Requirements */} Requisitos SEP
  • {datosGenerales['objetivo_general'] && ( )}
    Objetivo general definido
  • {datosGenerales['competencias'] && ( )}
    Competencias especificadas
  • {datosGenerales['evaluacion'] && ( )}
    Criterios de evaluación
) } function Check({ className }: { className?: string }) { return ( ) }