/**
 * 地址解析工具函数
 */

/**
 * 根据完整地址识别市区信息（去除省份）
 * @param fullAddress 完整地址字符串 (格式: 省市区街道****)
 * @returns {city: string, district: string, cityDistrict: string}
 *   - city: 市级信息（第一个市或自治州，不包含省份）
 *   - district: 区级信息（区、县、自治县或第二个市）
 *   - cityDistrict: 市区组合（市级+区级，不包含省份）
 */
export const parseAddress = (fullAddress: string) => {
    let city = '';
    let district = '';
    let cityDistrict = '';
    
    // 先尝试匹配常见的省份模式，然后从剩余字符串中提取市区信息
    // 省份通常在地址开头，格式如"江苏省南京市鼓楼区..."
    const provincePattern = /^(\S+省|\S+自治区|\S+特别行政区)/;
    const addressWithoutProvince = fullAddress.replace(provincePattern, '');
    
    // 市级匹配模式：市、自治州（在去除省份后的地址中查找）
    const cityPatterns = [
        /(\S+自治州)/,  // 匹配自治州
        /(\S+市)/       // 匹配市
    ];
    
    // 区级匹配模式：区、县、自治县、第二个市
    const districtPatterns = [
        /(?:自治州|市)(\S+区)/,    // 自治州或市后面的区
        /(?:自治州|市)(\S+自治县)/,  // 自治州或市后面的自治县
        /(?:自治州|市)(\S+县)/,    // 自治州或市后面的县
        /(?:自治州|市)(\S+市)/     // 自治州或市后面的第二个市
    ];
    
    // 查找市级信息（在去除省份后的地址中查找）
    for (const pattern of cityPatterns) {
        const match = addressWithoutProvince.match(pattern);
        if (match) {
            city = match[1];
            break;
        }
    }
    
    // 查找区级信息（在去除省份后的地址中查找）
    for (const pattern of districtPatterns) {
        const match = addressWithoutProvince.match(pattern);
        if (match) {
            district = match[1];
            break;
        }
    }
    
    // 组合市区信息（不包含省份）
    if (city && district) {
        cityDistrict = city + district;
    } else if (city) {
        cityDistrict = city;
    } else if (district) {
        cityDistrict = district;
    }
    
    return { city, district, cityDistrict };
};

/**
 * 当详细地址发生变化时，解析并返回市区信息
 * @param value 详细地址值
 * @returns 解析后的市区信息
 */
export const handleAddressChange = (value: string) => {
    if (value) {
        return parseAddress(value);
    }
    return { city: '', district: '', cityDistrict: '' };
};