import { describe, it, expect } from 'vitest';
import { getCountryCodeFromCallsign } from './callsignMapper';

describe('getCountryCodeFromCallsign', () => {
  it('should return US for K prefix', () => {
    expect(getCountryCodeFromCallsign('K6ABC')).toBe('US');
    expect(getCountryCodeFromCallsign('KA1ABC')).toBe('US');
    expect(getCountryCodeFromCallsign('W1AW')).toBe('US');
    expect(getCountryCodeFromCallsign('N0CALL')).toBe('US');
  });

  it('should handle callsigns with SSID', () => {
    expect(getCountryCodeFromCallsign('K6ABC-5')).toBe('US');
    expect(getCountryCodeFromCallsign('PA0MZ-9')).toBe('NL');
  });

  it('should return NL for PA prefix', () => {
    expect(getCountryCodeFromCallsign('PA0MZ')).toBe('NL');
    expect(getCountryCodeFromCallsign('PD0ABC')).toBe('NL');
  });

  it('should return GB for G and M prefixes', () => {
    expect(getCountryCodeFromCallsign('G4ABC')).toBe('GB');
    expect(getCountryCodeFromCallsign('M0XYZ')).toBe('GB');
  });

  it('should return DE for D prefix', () => {
    expect(getCountryCodeFromCallsign('DL1ABC')).toBe('DE');
    expect(getCountryCodeFromCallsign('DJ5XY')).toBe('DE');
  });

  it('should return FR for F prefix', () => {
    expect(getCountryCodeFromCallsign('F6ABC')).toBe('FR');
  });

  it('should return JP for JA prefix', () => {
    expect(getCountryCodeFromCallsign('JA1ABC')).toBe('JP');
  });

  it('should return CA for VE prefix', () => {
    expect(getCountryCodeFromCallsign('VE3ABC')).toBe('CA');
  });

  it('should handle lowercase callsigns', () => {
    expect(getCountryCodeFromCallsign('k6abc')).toBe('US');
    expect(getCountryCodeFromCallsign('pa0mz')).toBe('NL');
  });

  it('should return null for invalid or unknown callsigns', () => {
    expect(getCountryCodeFromCallsign('')).toBe(null);
    expect(getCountryCodeFromCallsign(undefined)).toBe(null);
    expect(getCountryCodeFromCallsign('???')).toBe(null);
  });

  it('should handle numeric prefixes', () => {
    expect(getCountryCodeFromCallsign('9A1ABC')).toBe('HR'); // Croatia
    expect(getCountryCodeFromCallsign('4X1AB')).toBe('IL'); // Israel
  });

  it('should match longest prefix first', () => {
    // Make sure it tries 3-char, then 2-char, then 1-char prefixes
    expect(getCountryCodeFromCallsign('PA0MZ')).toBe('NL'); // Should match PA, not P
  });
});
