interface jx_throttlesType {
    /*************************************************
     * 节流时间
     */
    time: number
    /*************************************************
     * 节流成功回调
     */
    success: Function
    /*************************************************
     * 节流失败回调
     */
    fail?: Function
}
/*************************************************
 * 节流函数
 */
export function jx_throttles(options: jx_throttlesType) {
    let pre: number = 0
    return function (this: any, ...args: any) {
        let now = Date.now()
        if (now - pre >= options.time) {
            options.success && options.success.apply(this, args)
            pre = Date.now()
        } else {
            options.fail && options.fail((((pre - now) / 1000) + options.time / 1000).toFixed(0))
        }
    }
}

/*************************************************
 * 防抖函数
 * @param {Function} [fun]  防抖成功回调
 * @param {number} [time] 防抖时间
 * 
 */
export function jx_trembling(fun: Function, time: number) {
    let timer: any = null
    return function (this: any, ...args: any) {
        clearTimeout(timer)
        timer = setTimeout(() => {
            fun.apply(this, args)
        }, time)
    }
}

// ******************** 请求加载提示 *****************************
//#region 
/**
* @function 请求加载提示
* @description 传递一个说明内容【有参数showLoading，无参数hideLoading】
* @param  value  {string} 加载提示内容【非必传】
* @return void
* @example 
* setLoading('登录中')
*/
export function setLoading(value?: string) {
    if (value) {
        uni.showLoading({ title: value })
    } else {
        uni.hideLoading()
    }
}
//#endregion

// ******************** 添加请求记录与中断请求 *****************************
//#region 
let requestTaskList: Array<AnyObject> = [] // 请求列表
/**
* @function 添加请求记录
* @description 传递一个task对象
* @param  task  {object} task对象
* @return void
* @example 
* addTask({})
*/
export function addTask(task: AnyObject): void {
    if (requestTaskList.length >= 17) {
        requestTaskList = []
    }
    requestTaskList.push(task)
}


/*************************************************
 * @desc 处理时间 YYY-M-D
 * @param {time}-需要处理的时间
 * @return {time} - YYYY-MM-DD
 */
export const timeFormatD = (time?: number | string) => {
    let timer = time ? new Date(time) : new Date()
    return `${timer.getFullYear()}-${(timer.getMonth() + 1) < 10 ? '0' + (timer.getMonth() + 1) : (timer.getMonth() + 1)}-${timer.getDate() < 10 ? '0' + timer.getDate() : timer.getDate()}`
}


/*************************************************
 * @desc 处理时间 YYY-M-D
 * @param {time}-需要处理的时间
 * @return {time} - YYYY-MM-DD HH:mm:ss
 */
export const timeFormatDateHMS = (time?: number | string) => {
    let timer = time ? new Date(time) : new Date()
    return `${timer.getFullYear()}-${(timer.getMonth() + 1) < 10 ? '0' + (timer.getMonth() + 1) : (timer.getMonth() + 1)}-${timer.getDate() < 10 ? '0' + timer.getDate() : timer.getDate()} ${timer.getHours() < 10 ? '0' + timer.getHours() : timer.getHours() }:${timer.getMinutes()<10 ? '0' + timer.getMinutes() : timer.getMinutes()}:${timer.getSeconds() < 10 ? '0' + timer.getSeconds() : timer.getSeconds()}`
}