import request from './request'
import cache from './cacheKey.js'
const toast = (title, duration = 1500, call, mask = false, icon = 'none') => {
    if (Boolean(title) === false) {
        return
    }
    uni.showToast({
        title,
        duration,
        mask,
        icon,
    })
    setTimeout(() => {
        call && call()
    }, duration);
}
/**
 * @description 格式化时间
 * @param time
 * @param cFormat
 * @returns {string|null}
 */
function parseTime (time, cFormat) {
    if (arguments.length === 0) {
        return null
    }
    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
    let date
    if (typeof time === 'object') {
        date = time
    } else {
        if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
            time = parseInt(time)
        }
        if (typeof time === 'number' && time.toString().length === 10) {
            time = time * 1000
        }
        date = new Date(time)
    }
    const formatObj = {
        y: date.getFullYear(),
        m: date.getMonth() + 1,
        d: date.getDate(),
        h: date.getHours(),
        i: date.getMinutes(),
        s: date.getSeconds(),
        a: date.getDay()
    }
    return format.replace(/{([ymdhisa])+}/g, (result, key) => {
        let value = formatObj[key]
        if (key === 'a') {
            return ['日', '一', '二', '三', '四', '五', '六'][value]
        }
        if (result.length > 0 && value < 10) {
            value = '0' + value
        }
        return value || 0
    })
}


/**
 * @description 格式化时间
 * @param time
 * @param option
 * @returns {string}
 */
function formatTime (time, option) {
    if (('' + time).length === 10) {
        time = parseInt(time) * 1000
    } else {
        time = +time
    }
    if (option) {
        return parseTime(time, option)
    } else {
        const d = new Date(time)
        const now = Date.now()
        const diff = (now - d) / 1000
        if (diff < 30) {
            return '刚刚'
        } else if (diff < 3600) {
            // less 1 hour
            return Math.ceil(diff / 60) + '分钟前'
        } else if (diff < 3600 * 24) {
            return Math.ceil(diff / 3600) + '小时前'
        } else if (diff < 3600 * 24 * 2) {
            return '1天前'
        }
        return (
            d.getMonth() +
            1 +
            '月' +
            d.getDate() +
            '日'
            // +
            // d.getHours() +
            // '时'
            //  +
            // d.getMinutes() +
            // '分'
        )
    }
}
const h5Helper = {
    isAndroid: function () {
        return window.navigator.appVersion.toLowerCase().indexOf('android') != -1
    },
    isIOS: function () {
        return window.navigator.appVersion.toLowerCase().indexOf('iphone') != -1
    },
    isWeiXinWeb: function () {
        var ua = window.navigator.userAgent.toLowerCase()
        return ua.match(/MicroMessenger/i) == 'micromessenger'
    },
}

// 验证手机号格式
const validatePhoneNumber = (phone) => {
    if (!phone) return false
    var testReg = /^1[23456789]\d{9}$/
    return testReg.test(phone)
}


const getUserLocation = (call) => {
    uni.getLocation({
        type: 'wgs84',
        success: function (address) {
            call(address)
        },
        fail: err => {
            uni.showModal({
                title: '提示',
                content: '定位失败，请打开定位权限',
                success: function (res) {
                    if (res.confirm) {
                        uni.openSetting({
                            success: resSett => {
                                if (resSett.authSetting['scope.userLocation']) {
                                    uni.getLocation({
                                        success: address => {
                                            call && call(address)
                                        },
                                    })
                                }
                            },
                        })
                    }
                }
            })
        },
    })
}

// 加载用户配置
var globalConfigIsLoading = false,
    global_config = null,
    globalConfigCallbacks = [];
/**
 * 加载用户配置
 * @param call  加载成功后的回调
 * @param need_fresh 是否及时刷新用户配置
 */
const loadConfig = (call, need_fresh = false) => {
    if (call && global_config && !need_fresh) {
        call(global_config);
        return;
    }
    if (globalConfigIsLoading) {
        globalConfigCallbacks.push(call);
        return;
    }
    globalConfigIsLoading = true;
    request({
        url: '/org/userResource/userMsg',
    }).then(rs => {

        globalConfigIsLoading = false;
        global_config = rs.data;
        uni.setStorage({
            key: 'userInfo',
            data: global_config,
        })
        if (call) {
            call(global_config);
        }
        for (var i = 0; i < globalConfigCallbacks.length; i++) {
            globalConfigCallbacks[i](global_config);
        }
        globalConfigCallbacks = [];
    }).catch(err => {
        globalConfigIsLoading = false;
        console.warn(err);
        // uni.reLaunch({ url: '/pages/user/login' })
    })
}

export default {
    validatePhoneNumber,
    toast,
    formatTime,
    parseTime,
    h5Helper,
    getUserLocation,
    loadConfig,
}
