const projectBaseURL = "https://program.gter.net"

if (["localhost", "127.0.0.1"].includes(location.hostname)) {
    axios.defaults.headers = {
        Authorization: "97d1c7b2fe6dec05aaf52c0f3b9130e8",
    }
}

function $ajax(url) {
    var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}
    url = url.indexOf("https://") > -1 ? url : projectBaseURL + url

    if (["localhost", "127.0.0.1"].includes(location.hostname)) data["authorization"] = "97d1c7b2fe6dec05aaf52c0f3b9130e8"

    return new Promise(function (resolve, reject) {
        axios
            .post(url, data, {
                emulateJSON: true,
                withCredentials: true,
            })
            .then(function (res) {
                var data = typeof res.data == "string" ? JSON.parse(res.data) : res.data
                if (data.code == 401) {
                    openShowWindow()
                    reject()
                }
                if (data.code == 201) creationAlertBox("error", data.message || data.msg)
                resolve(data)
            })
            .catch(err => {
                if (err.response?.status == 401) openShowWindow()
            })
    })
}

function $ajaxget(url, data) {
    if (!data) data = {}

    // data["authorization"] = "97d1c7b2fe6dec05aaf52c0f3b9130e8"
    if (["localhost", "127.0.0.1"].includes(location.hostname)) data["authorization"] = "97d1c7b2fe6dec05aaf52c0f3b9130e8"

    url = url.indexOf("https://") > -1 ? url : projectBaseURL + url
    url += objectToQueryString(data)
    return new Promise((resolve, reject) => {
        axios
            .get(
                url,
                {},
                {
                    emulateJSON: true,
                    withCredentials: true,
                }
            )
            .then(res => {
                var data = typeof res.data == "string" ? JSON.parse(res.data) : res.data

                if (data.code == 401) {
                    openShowWindow()
                    reject()
                }
                if (data.code == 201) creationAlertBox("error", data.message || data.msg)

                resolve(data)
            })
            .catch(error => {
                console.log("resolve", resolve)

                // if (error.response?.status == 401) openShowWindow()
                resolve("")
            })
    })
}

function randomString(n) {
    let str = "abcdefghijklmnopqrstuvwxyz9876543210"
    let tmp = "",
        i = 0,
        l = str.length
    for (i = 0; i < n; i++) {
        tmp += str.charAt(Math.floor(Math.random() * l))
    }
    return tmp
}

function formatNumberWithSpaces(number) {
    if (typeof number != "string") number = ""
    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
}

// 将一个JavaScript对象转换为路由参数的形式将键值对转换为key=value的形式
function objectToQueryString(obj = {}) {
    const queryString = Object.keys(obj)
        .map(key => encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]))
        .join("&")
    return queryString ? "?" + queryString : ""
}

function decodeKey(encrypted, key) {
    return new Promise((resolve, reject) => {
        try {
            const encryptedData = CryptoJS.enc.Base64.parse(encrypted)

            const decrypted = CryptoJS.AES.decrypt(
                {
                    ciphertext: encryptedData,
                },
                CryptoJS.enc.Utf8.parse(key),
                {
                    mode: CryptoJS.mode.ECB,
                    padding: CryptoJS.pad.Pkcs7,
                }
            )

            const text = JSON.parse(decrypted.toString(CryptoJS.enc.Utf8))
            resolve(text)
        } catch (error) {
            reject()
        }
    })
}

function getBaseData() {
    return new Promise((resolve, reject) => {
        // const storedTime = localStorage.getItem("dataTimestamp")
        // const storedData = localStorage.getItem("basicData")
        // const currentTime = new Date().getTime()
        // const timeDiff = currentTime - parseInt(storedTime)
        // if (storedTime && storedData && timeDiff <= 5 * 60 * 1000) {
        //     // 在5分钟内,使用本地存储的数据
        //     const basicData = JSON.parse(storedData)
        //     // 处理数据
        //     resolve(basicData)
        //     return
        // }

        $ajaxget("/api/home/basicData").then(res => {
            if (res.code != 200) return
            const data = res.data
            const user = data.user
            const basicData = {
                contrastcount: data.contrastcount || 0,
                university: data.university,
                discipline: data.discipline,
                rankings: data.rankings,
                encodekey: data.encodekey,
                user,
            }
            // if (user.uin > 0) {
            //     localStorage.setItem("dataTimestamp", new Date().getTime())
            //     localStorage.setItem("basicData", JSON.stringify(basicData))
            // } else {
            //     localStorage.removeItem("basicData")
            //     localStorage.removeItem("dataTimestamp")
            // }
            resolve(basicData)
        })
    })
}

function openShowWindow() {
    showWindow("login", "https://passport.gter.net/login/ajax", "get", -1, { cover: true })
}

function strtimeago(dateStr) {
    dateStr = dateStr + "" // 反之传入的不是字符串
    dateStr = dateStr.replaceAll("-", "/") // 修改格式
    var minute = 1000 * 60 //把分,时,天,周,半个月,一个月用毫秒表示
    var hour = minute * 60
    var day = hour * 24
    var now = new Date().getTime() //获取当前时间毫秒
    let objectTime = new Date(dateStr).getTime()
    var diffValue = now - objectTime //时间差
    if (diffValue < 0) return "刚刚"

    var minC = diffValue / minute //计算时间差的分,时,天,周,月
    var hourC = diffValue / hour
    var dayC = diffValue / day

    const diffInMilliseconds = now - objectTime
    const diffInYears = diffInMilliseconds / (1000 * 60 * 60 * 24 * 365)
    const diffInMonths = diffInYears * 12

    let result = ""
    if (dayC >= 7) {
        var datetime = new Date(dateStr)
        var Nyear = datetime.getFullYear()
        var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1
        var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate()
        var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours()
        var Nmin = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes()

        if (diffInYears >= 1) result = Math.floor(diffInYears) + "年前"
        else if (diffInMonths >= 1) result = Math.floor(diffInMonths) + "个月前"
    } else if (dayC >= 1) result = parseInt(dayC) + "天前"
    else if (hourC >= 1 && hourC <= 24) result = parseInt(hourC) + "小时前"
    else if (minC >= 1 && minC <= 60) result = parseInt(minC) + "分钟前"
    else result = "刚刚"

    return result
}