import { calcularDv } from 'src/crm/cierre/ruc.util';
import { cdcDesdeTexto, parsearCdc } from './cdc.util';

// 01 + RUC 80000001 DV 9... armado con su dígito verificador real.
const base43 = '01' + '80000001' + '9' + '001' + '002' + '0001234' + '1' + '20261015' + '1' + '123456789';
const CDC = base43 + calcularDv(base43);

describe('parsearCdc', () => {
  it('descompone un CDC válido', () => {
    expect(parsearCdc(CDC)).toEqual({
      cdc: CDC,
      tipoDocumento: 1,
      ruc: '80000001',
      dv: '9',
      establecimiento: '001',
      punto: '002',
      numero: '0001234',
      fecha: '2026-10-15',
    });
  });

  it('acepta espacios y guiones', () => {
    expect(parsearCdc(CDC.replace(/(\d{4})/g, '$1 '))?.cdc).toBe(CDC);
  });

  it('rechaza un dígito verificador incorrecto o un largo distinto', () => {
    const malo = CDC.slice(0, 43) + ((Number(CDC[43]) + 1) % 10);
    expect(parsearCdc(malo)).toBeNull();
    expect(parsearCdc(CDC.slice(0, 43))).toBeNull();
  });
});

describe('cdcDesdeTexto', () => {
  it('saca el CDC de la URL del QR del KuDE', () => {
    const url = `https://ekuatia.set.gov.py/consultas/qr?nVersion=150&Id=${CDC}&dFeEmiDE=323032362d31302d3135&dTotGralOpe=110000`;
    expect(cdcDesdeTexto(url)).toBe(CDC);
  });

  it('acepta el CDC pegado y rechaza basura', () => {
    expect(cdcDesdeTexto(CDC)).toBe(CDC);
    expect(cdcDesdeTexto('hola')).toBeNull();
  });
});
