import { aE164, formatoLocalPy, mismoTelefono } from './telefono.util';

describe('aE164', () => {
  it('normaliza las formas en que un paraguayo escribe su celular', () => {
    const esperado = '+595981123456';
    for (const entrada of [
      '0981123456',
      '0981 123 456',
      '0981 123-456',
      '(0981) 123456',
      '595981123456',
      '+595981123456',
      '+595 981 123 456',
      '981123456',
    ]) {
      expect(aE164(entrada)).toBe(esperado);
    }
  });

  it('toma fijos con 0 inicial', () => {
    expect(aE164('021555444')).toBe('+59521555444');
  });

  it('respeta un número de otro país que ya viene internacional', () => {
    expect(aE164('+5491112345678')).toBe('+5491112345678');
  });

  it('devuelve null en vez de inventar cuando no puede interpretarlo', () => {
    // Inventar un prefijo acá crearía un choque en el índice único de leads
    // contra el teléfono de otro cliente real.
    for (const basura of ['', '   ', null, undefined, 'no tengo', '123', '4', 'abc-def']) {
      expect(aE164(basura as any)).toBeNull();
    }
  });

  it('no acepta un internacional absurdamente largo o corto', () => {
    expect(aE164('+1')).toBeNull();
    expect(aE164('+1234567890123456789')).toBeNull();
  });
});

describe('mismoTelefono', () => {
  it('reconoce el mismo número escrito distinto', () => {
    expect(mismoTelefono('0981123456', '+595 981 123 456')).toBe(true);
  });

  it('dos basuras no son el mismo teléfono', () => {
    // Las dos normalizan a null; tratarlas como iguales fusionaría leads
    // distintos que simplemente tienen el teléfono mal cargado.
    expect(mismoTelefono('abc', 'def')).toBe(false);
  });

  it('distingue números distintos', () => {
    expect(mismoTelefono('0981123456', '0981123457')).toBe(false);
  });
});

describe('formatoLocalPy', () => {
  it('muestra el celular como lo lee un paraguayo', () => {
    expect(formatoLocalPy('+595981123456')).toBe('0981 123 456');
  });

  it('deja como está lo que no es de Paraguay', () => {
    expect(formatoLocalPy('+5491112345678')).toBe('+5491112345678');
  });

  it('sin valor devuelve null', () => {
    expect(formatoLocalPy(null)).toBeNull();
  });
});
