import {
    parsePhoneNumberFromString,
    CountryCode,
} from "libphonenumber-js";

import { 
    IS_VALID_FULL_PHONE, 
} from "@utils/constants";

/**
 * 统一处理历史脏数据
 * @param phone - 原始电话号码
 * @param country - ISO 3166-1 alpha-2 国家码（如 US, CN）
 * @returns 格式化后的 E.164 电话号，区号和号码之间用空格分隔
 */
export function normalizePhoneForForm(
    phone?: string,
    country?: string,
): string {

    if (!phone) {
        return "";
    }
    if(IS_VALID_FULL_PHONE.test(phone)) {
        return phone;
    }

    try {
        const parsed = parsePhoneNumberFromString(phone, country as CountryCode);
        console.log(phone + " parsed ----: ", parsed,parsed?.isValid());
        
        if (parsed?.isValid()) {
            // E.164 的号码是 +12135551234
            // 我们在返回时加空格分隔区号和号码
            return `+${parsed.countryCallingCode} ${parsed.nationalNumber}`;
        }
        if(parsed?.isPossible()) {
            return `+${parsed.countryCallingCode} ${parsed.nationalNumber}`;
        }
    } catch {
        // parse 出错时忽略，走 fallback
    }

    

    // fallback: 除了数字，其他符号均移除
    const digits = phone.replace(/[^\d]/g, "");

    // 没有 + 的情况，给默认国家区号
    const defaultCallingCode =
        country === "CN"
            ? "+86"
            : country === "GB"
            ? "+44"
            : "+1";

    return `${defaultCallingCode} ${digits}`;
}