import { describe, it, expect } from 'vitest'
import { readFileSync } from 'fs'
import { resolve } from 'path'
import { parseBpmnXml, extractActivityElements } from '@/domain/bpmn-parser'

describe('Colaboración multi-pool', () => {
  const xml = readFileSync(resolve(__dirname, '../proceso_carga_facturas.bpmn'), 'utf-8')

  it('parsea sin error', () => {
    expect(() => parseBpmnXml(xml)).not.toThrow()
  })

  it('extrae actividades de TODOS los pools, no solo el primero', () => {
    const graph = parseBpmnXml(xml)
    const acts = extractActivityElements(graph)
    const ids = acts.map((a) => a.bpmnElementId)

    // Pool 1 — IKData (OCR)
    expect(ids).toContain('Task_OCR')
    expect(ids).toContain('Task_GenerarPayload')

    // Pool 2 — Robot RPA (proceso principal)
    expect(ids).toContain('Task_LeerPayload')
    expect(ids).toContain('Task_AbrirSAP')
    expect(ids).toContain('Task_GuardarFactura')
    expect(ids).toContain('Task_DerivarBandeja')

    // Pool 3 — SAP (pool de soporte sin StartEvent propio)
    expect(ids).toContain('Task_RecibirFactura')

    // Pool 4 — Bandeja manual (pool de soporte sin StartEvent propio)
    expect(ids).toContain('Task_RevisionManual')

    expect(acts.length).toBeGreaterThanOrEqual(14)
  })

  it('tiene StartEvents de los pools principales aunque otros pools no tengan', () => {
    const graph = parseBpmnXml(xml)
    expect(graph.startEventIds).toContain('StartEvent_IKData')
    expect(graph.startEventIds).toContain('StartEvent_Robot')
  })
})
