import { NextRequest, NextResponse } from 'next/server' import { sendDocToSRI } from '@/lib/sri-utils' import { formatSRIError, isCriticalError, isRecoverableError } from '@/lib/sri-error-codes' export async function POST(request: NextRequest) { try { const body = await request.json() const { signedXml, ambiente } = body if (!signedXml) { return NextResponse.json( { error: 'XML firmado es requerido' }, { status: 400 } ) } // Validar ambiente const ambienteValido = ambiente === 'produccion' ? 'produccion' : 'pruebas' // Enviar el documento firmado al SRI const result = await sendDocToSRI(signedXml, ambienteValido) const respuestaRecepcion = result.RespuestaRecepcionComprobante const estado = respuestaRecepcion.estado // Extraer mensajes y clave de acceso si el documento fue devuelto let mensajes: any[] = [] let claveAcceso: string | undefined if (respuestaRecepcion.comprobantes?.comprobante) { const comprobante = Array.isArray(respuestaRecepcion.comprobantes.comprobante) ? respuestaRecepcion.comprobantes.comprobante[0] : respuestaRecepcion.comprobantes.comprobante claveAcceso = comprobante.claveAcceso if (estado === 'DEVUELTA' && comprobante.mensajes?.mensaje) { const mensajesRaw = Array.isArray(comprobante.mensajes.mensaje) ? comprobante.mensajes.mensaje : [comprobante.mensajes.mensaje] mensajes = mensajesRaw.map((m: any) => ({ identificador: m.identificador, mensaje: m.mensaje, tipo: m.tipo as "INFORMATIVO" | "ADVERTENCIA" | "ERROR", informacionAdicional: m.informacionAdicional, // Agregar información formateada para mostrar al usuario mensajeFormateado: formatSRIError(m.identificador, m.mensaje, m.informacionAdicional), esCritico: isCriticalError(m.identificador), esRecuperable: isRecoverableError(m.identificador) })) } } // Determinar el estado para el frontend let estadoFrontend = 'enviando' if (estado === 'RECIBIDA') { estadoFrontend = 'verificando' } else if (estado === 'DEVUELTA') { estadoFrontend = 'devuelto' } return NextResponse.json({ success: true, estado: estadoFrontend, estadoRecepcion: estado, mensaje: estado === 'RECIBIDA' ? 'Documento recibido por el SRI, verificando estado...' : 'Documento devuelto por el SRI', claveAcceso, mensajes, respuestaCompleta: result }) } catch (error) { console.error('Error enviando documento al SRI:', error) return NextResponse.json( { error: 'Error al enviar el documento al SRI', details: error instanceof Error ? error.message : 'Error desconocido' }, { status: 500 } ) } }