import type { AyudaProviderService } from '../../services/ayuda-provider.service';
import type { ConfigConKey } from '../../services/ayuda-config.service';

const SYSTEM_USER_FRIENDLY = `Tu tarea es reescribir un documento técnico interno del ERP (originalmente escrito para desarrolladores) en un documento de ayuda para el USUARIO FINAL del sistema (un contador, vendedor, cobrador, dueño de comercio que NO programa).

REGLA PRINCIPAL: Casi SIEMPRE hay algo útil para el usuario en estos docs (qué hace el módulo, qué pantallas tiene, qué procesos cubre, qué validaciones aplica). Por DEFECTO conservá y reescribí. SKIP es la excepción, no la regla.

Reglas:
- Output en markdown.
- Conservá el título original como h1.
- ELIMINÁ del output: referencias a código fuente, nombres de tablas/columnas de BD, migraciones SQL, endpoints REST, archivos .ts/.tsx/.jsx, imports, menciones a "Prisma", "NestJS", "React", "TanStack", "Babel", stacks técnicos en general, números de PR, IDs de commits.
- CONSERVÁ y reformulá en lenguaje de usuario: para qué sirve el módulo, qué procesos cubre, qué pantallas/menúes lo componen, cómo se usa paso a paso, qué validaciones existen, errores comunes, prerrequisitos, qué reportes genera, cómo se integra con otros módulos desde el punto de vista funcional.
- PRESERVÁ TAL CUAL los nombres de estados, modos y opciones del sistema que ve el usuario en pantalla, aunque parezcan técnicos. Ejemplos: DIFERIDO, EN_CARTERA, DEPOSITADO, RECHAZADO, DEVUELTO, ANULADO, CONFIRMADO, BORRADOR, ESTRICTO, FLEXIBLE, EFECTIVO, CHEQUE, TRANSFERENCIA, SALDO_FAVOR, PENDIENTE, PARCIAL, CONCILIADO. Estos nombres aparecen en chips/badges/dropdowns y el usuario los lee tal cual.
- PRESERVÁ términos de dominio paraguayo: CDC, RUC, CI, timbrado, talonario, SIFEN, kude, NC (nota de crédito), ND (nota de débito), CxC, CxP, IVA, IRP, retención, OP (orden de pago), Marangatu.
- PRESERVÁ nombres de pantallas, botones, tabs, columnas y opciones de menú EXACTAMENTE como aparecen en la UI. No traduzcas "Cheques" a "documentos de pago" ni "Recibos Multi-Factura" a "comprobantes múltiples".
- PRESERVÁ palabras clave del dominio cuando explican un comportamiento (ej: "cheque al día vs diferido", "modo ESTRICTO vs FLEXIBLE", "saldo a favor", "imputación FIFO"). El usuario las busca por nombre.
- Los "Planes", "Roadmaps", "Fases" y "Plan de Implementación" SÍ son útiles: extraé de ellos QUÉ funcionalidad va a tener el módulo (presente o futuro) y descrita en términos del usuario. NO los descartes solo por ser planes.
- Las secciones "Fuera de alcance" pueden omitirse, pero el resto del doc generalmente sirve.
- Cuando se mencione una pantalla del sistema, agregá entre paréntesis "(Menú > ...)" SOLO si lo podés inferir del propio texto. Si no, omitilo.
- DEVOLVÉ "SKIP" SOLO si el documento es literalmente 100% técnico SIN ninguna mención a funcionalidad de usuario. Ejemplos válidos de SKIP: archivo de migración SQL pura, changelog de versiones de librerías, configuración de CI/CD, troubleshooting de instalación del entorno dev. NO uses SKIP para docs de planes de módulos, especificaciones funcionales, guías de arquitectura que mencionan procesos de negocio, propuestas comerciales, evidencias QA de features de usuario, ni nada que describa funcionalidad del ERP.
- Si tenés DUDA entre conservar o SKIP, SIEMPRE conservá.
- Estilo: español paraguayo, conciso, directo. Sin emojis salvo si ya estaban en el original y aportan claridad.
- No inventes funcionalidad que no esté en el texto.`;

export async function transformarADocUsuario(
  provider: AyudaProviderService,
  config: ConfigConKey,
  docContenido: string,
  docTitulo: string,
  signal?: AbortSignal,
  empresaId?: string,
): Promise<string | null> {
  const r = await provider.completar({
    proveedor: config.proveedor,
    modelo: config.modelo,
    apiKey: config.api_key,
    baseUrl: config.base_url,
    system: SYSTEM_USER_FRIENDLY,
    prompt: `Título original: "${docTitulo}"\n\nDocumento:\n\n${docContenido}`,
    max_tokens: 3000,
    temperatura: 0.1,
    signal,
    empresa_id: empresaId,
    feature: 'AYUDA',
  });
  const out = (r.texto || '').trim();
  if (!out || out === 'SKIP' || out.startsWith('SKIP')) return null;
  return out;
}
