/**
 * 防抖函数，确保在指定延迟内不会被频繁调用。
 * @param func 要防抖的函数。
 * @param delay 在函数允许再次调用之前的延迟时间（毫秒）。
 * @returns 一个防抖后的函数。
 */
export const debounce = <T extends (...args: any[]) => void>(func: T, delay: number = 300) => {
    let timeoutId: ReturnType<typeof setTimeout> | undefined;

    return (...args: Parameters<T>) => {
        // 如果已经存在计时器，清除它
        if (timeoutId) {
            clearTimeout(timeoutId);
        }

        // 设置一个新的计时器，在指定延迟后调用函数
        timeoutId = setTimeout(() => {
            func(...args);
        }, delay);
    };
};

/**
 * 节流函数，确保被调用的频率不超过指定的延迟。
 * @param func 要节流的函数。
 * @param delay 在函数允许再次调用之前的延迟时间（毫秒）。
 * @returns 一个节流后的函数。
 */
export const throttle = <T extends (...args: any[]) => void>(func: T, delay: number = 300) => {
    let isThrottled = false;

    return (...args: Parameters<T>) => {
        // 如果未处于节流状态，调用函数并进入节流状态
        if (!isThrottled) {
            func(...args);

            // 设置一个延迟后解除节流状态的定时器
            isThrottled = true;
            setTimeout(() => {
                isThrottled = false;
            }, delay);
        }
    };
};

/**
 * 过滤手机号码，隐藏中间四位数字。
 * @param {string} phoneNumber - 待过滤的手机号码。
 * @returns {string} - 过滤后的手机号码，中间四位数字被替换为 '****'。
 * 如果手机号码不符合规则，则返回手机号。
 */
export function filterPhoneNumber(phoneNumber: string | undefined): string {
    if(!phoneNumber) return ''
    let reg = /^1[3456789]{1}\d{9}$/	//必须是以1开头，第二位必须是3-9中的任意一个数，后面9位必须是数字
    //校验手机号是否正确
    if (reg.test(phoneNumber)) {
        phoneNumber = phoneNumber.toString()	//先强制转换成字符串类型
        return phoneNumber.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
    } else {
        return ''
    }
}


export  function avatarURL(name: string | undefined) {
    if (name && isHttp(name)) {
        return isHttp(name);
    }

    return '';
}


function isHttp(url: string) {
    if (url.substr(0, 7).toLowerCase() === 'http://' || url.substr(0, 8).toLowerCase() === 'https://'|| url.substr(0, 4).toLowerCase() === 'blob')
     {
        return url;
    } else {
        return `${import.meta.env.VITE_APP_BASE_CDN}/${url}`;
    }
}


/**
 * @Description: CDN地址
 * @author：汪明
 * @date 2024/5/10 8:31
*/
export const cdnUrl = (path: string) => {
    return `${import.meta.env.VITE_APP_BASE_CDN}/${path}`;
}
