import { describe, it, expect } from 'vitest';
import { normalizarTelefonoEs, construirVariablesLlamada } from '@/lib/voice/retell';

describe('normalizarTelefonoEs', () => {
  it('añade prefijo +34 a un móvil nacional de 9 dígitos', () => {
    expect(normalizarTelefonoEs('612345678')).toBe('+34612345678');
  });

  it('acepta fijos nacionales (empiezan por 8/9)', () => {
    expect(normalizarTelefonoEs('912345678')).toBe('+34912345678');
  });

  it('limpia espacios, guiones y paréntesis', () => {
    expect(normalizarTelefonoEs('612 34 56 78')).toBe('+34612345678');
    expect(normalizarTelefonoEs('+34 612-345-678')).toBe('+34612345678');
  });

  it('respeta un E.164 ya formado', () => {
    expect(normalizarTelefonoEs('+34612345678')).toBe('+34612345678');
  });

  it('normaliza los prefijos 0034 y 34 sin +', () => {
    expect(normalizarTelefonoEs('0034612345678')).toBe('+34612345678');
    expect(normalizarTelefonoEs('34612345678')).toBe('+34612345678');
  });

  it('devuelve null si no es un teléfono válido', () => {
    expect(normalizarTelefonoEs('123')).toBeNull();
    expect(normalizarTelefonoEs('hola')).toBeNull();
  });
});

describe('construirVariablesLlamada', () => {
  it('incluye siempre empresa_nombre y el nombre de pila del cliente', () => {
    const vars = construirVariablesLlamada(
      { nombreEmpresa: 'Reformas Ejemplo' },
      { nombre: 'Ana Pérez', tipoReforma: 'cocina', provincia: 'Madrid' },
    );
    expect(vars.empresa_nombre).toBe('Reformas Ejemplo');
    expect(vars.cliente_nombre).toBe('Ana');
    expect(vars.tipo_reforma).toBe('cocina');
    expect(vars.provincia).toBe('Madrid');
  });

  it('omite tipo_reforma y provincia cuando faltan', () => {
    const vars = construirVariablesLlamada(
      { nombreEmpresa: 'Reformas Ejemplo' },
      { nombre: 'Luis', tipoReforma: null, provincia: null },
    );
    expect(vars.empresa_nombre).toBe('Reformas Ejemplo');
    expect(vars.cliente_nombre).toBe('Luis');
    expect('tipo_reforma' in vars).toBe(false);
    expect('provincia' in vars).toBe(false);
  });

  it('usa la etiqueta en minúscula para tipo_reforma', () => {
    const vars = construirVariablesLlamada(
      { nombreEmpresa: 'X' },
      { nombre: 'Eva', tipoReforma: 'integral', provincia: null },
    );
    expect(vars.tipo_reforma).toBe('reforma integral');
  });
});
