/**
 * 防抖
 *
 * @param func    功能函数(即要防抖的函数)
 * @param delay   延时时间
 * @param thisArg 功能函数内this的对象
 */
export function debounce(func: Function, delay: number, thisArg?: any) {
    let timer: number;
    return function (...args: any[]) {
        if (timer) {
            window.clearTimeout(timer);
        }
        timer = window.setTimeout(function () {
            func.apply(thisArg, args);
        }, delay)
    }
}
/**
 * 节流（原理同上）
 *
 * @param func    功能函数(即要节流的函数)
 * @param delay   延时时间
 * @param thisArg 功能函数内this的对象
 */
export function throttle(func: Function, delay: number, thisArg?: any) {
    let timeStamp: number;
    return function (...args: any[]) {
        const nowTimeStamp = Date.now();
        if ((!timeStamp) || nowTimeStamp - timeStamp >= delay) {
            func.apply(thisArg, args);
            timeStamp = nowTimeStamp;
        }
    }
}
/**
 * vite引入图片
 *
 * @param {string} name   文件路径
 */
export function getImageUrl(name: string) {
    return new URL(`../assets/images/${name}`, import.meta.url).href;
}
/**
 * 手机号脱敏处理
 * @param  { string} phoneNumber  手机号码
 * @returns 返回处理后的手机号码
 */
export function desensitizationPhone(phoneNumber: string) {
    if (!phoneNumber) return "";
    return phoneNumber.replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2")
}
/**
 * 姓名脱敏处理
 * @param {string} name  姓名
 * @returns 返回处理后的姓名
 */
export function desensitizationName(name: string) {
    if (!name) return "";
    const len = name.length;
    return len <= 3 ? "*" + name.substring(1, len) :
        len > 3 && len <= 6 ? "**" + name.substring(2, len) :
            len > 6 ? name.substring(0, 2) + "****" + name.substring(6, len) : "";
}
/**
 * 检查文件类型
 * @param  {string} fileValue  姓名
 * @returns 返回处理后的姓名
 */
export function checkFile(fileValue: string) {
    let index = fileValue.lastIndexOf('.'); //（考虑严谨用lastIndexOf(".")得到）得到"."在第几位
    let fileValueSuffix = fileValue.substring(index); //截断"."之前的，得到后缀
    if (/(.*)\.(mp4|avi|wmv|MP4|AVI|WMV)$/.test(fileValueSuffix)) {
        //根据后缀，判断是否符合视频格式
        return 'video';
    } else if (/(.*)\.(jpg|JPG|bmp|BMP|mpg|MPG|mpeg|MPEG|tis|TIS|svg)$/.test(fileValueSuffix)) {
        //根据后缀，判断是否符合图片格式
        return 'image';
    } else if (/(.*)\.(xls|XLS|xlsx|XLSX)$/.test(fileValueSuffix)) {
        //根据后缀，判断是否符合OFFICE格式
        return 'xls';
    } else if (/(.*)\.(doc|DOC|docx|DOCX)$/.test(fileValueSuffix)) {
        // 文档类型
        return 'doc';
    } else if (/(.*)\.(pdf|PDF)$/.test(fileValueSuffix)) {
        // PDF
        return 'pdf';
    } else if (/(.*)\.(PPT|PPTX|ppt|pptx)$/.test(fileValueSuffix)) {
        // ppt
        return 'ppt';
    }
    return '';
}
// 传入类型返回对应的文件类型图标
export function fileType(file: string) {
    switch (file) {
        case 'video':
            return 'ele-VideoCamera';
        case 'image':
            return 'ele-Picture';
        case 'xls':
            return 'iconfont icon-excel';
        case 'doc':
            return 'ele-Document';
        case 'pdf':
            return 'iconfont icon-pdf';
        case 'ppt':
            return 'iconfont icon-ppt';
        default:
            break;
    }
}
/**
 * 常用意见
 * @param  {string} Discriminate  甄别惯用语
 * @param  {string} Return  退回惯用语
 * @param  {string} Archive  归档惯用语
 * @param  {string} Teti  特提惯用语
 * @param  {string} Seat  坐席惯用语
 * @param  {string} Circulation  流转惯用语
 * @param  {string} ReturnVisit  回访惯用语
 * @param  {string} HandleAgain  办理惯用语
 * @param  {string} Delay  延期惯用语
 * @param  {string} Supervise  督办惯用语
 * @param  {string} KnowledgeLocution  知识诉求惯用语
 */
export const commonEeum = {
    Discriminate: 'Discriminate', //  甄别惯用语
    Return: 'Return', // 退回惯用语
    Archive: 'Archive', // 归档惯用语
    Teti: 'Teti', // 特提惯用语
    Seat: 'Seat', // 坐席惯用语
    OrderCirculation: 'OrderCirculation', // 工单流转惯用语
    ReturnVisit: 'ReturnVisit', // 回访惯用语
    HandleAgain: 'HandleAgain', // 办理惯用语
    Delay: 'Delay', // 延期惯用语
    Supervise: 'Supervise', // 督办惯用语
    KnowledgeLocution: 'KnowledgeLocution', // 知识诉求惯用语
    RestReason: 'RestReason', // 小休原因
    Rest: 'Rest', // 小休常用意见
};
/**
 * 数字转换
 * @param  {number} value  数字
 * @returns 转换为大写 一二三四
 */
export function upNumber(value: number) {
    if (!/(^[1-9]\d*$)/) {
        return '非法数字';
    }
    let N = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
    let str = value.toString();
    let len = value.toString().length;
    let C_Num = [];
    for (let i = 0; i < len; i++) {
        C_Num.push(N[str.charAt(i)]);
    }
    return C_Num.join("");
}
function S4() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
export function guid() {
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}