import * as fs from 'fs';
import path from 'path';

interface PhoneNumberData {
  [key: string]: {
    country: string;
    digits: number;
  };
}
export interface PhoneNumberResult {
  country: string;
  identifier: string;
  isCorrectNumber?: boolean;
}

let phoneNumberData: PhoneNumberData | null = null;

function loadPhoneNumberData(): PhoneNumberData {
  if (phoneNumberData === null) {
    const filePath = path.join(__dirname, './json/phone_id.json');
    phoneNumberData = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
  }
  return phoneNumberData!;
}

export function checkPhoneNumber(input: string): PhoneNumberResult | boolean {
  if (!/^[0-9+]+$/.test(input)) {
    console.log('The input must contain only the sign "+" and numbers');
    return false;
  }

  input = input.replace(/\+/g, '');

  const data = loadPhoneNumberData();

  for (let i = 1; i <= input.length; i++) {
    const identifier = input.slice(0, i);
    if (data[identifier]) {
      const countryInfo = data[identifier];
      const totalDigitsExpected = countryInfo.digits + identifier.length;
      const isCorrectNumber =
        input.length === totalDigitsExpected ||
        (input.length === totalDigitsExpected + 1 && input[i].toLowerCase() === '0');

      return { country: countryInfo.country, identifier, isCorrectNumber };
    }
  }

  return false;
}