/**
 * axios请求封装
 * https://rudon.blog.csdn.net/
 */
import axios from 'axios'
import { getToken, getUser } from '@/utils/storage'
import router from '@/router'

import { ElMessage } from 'element-plus';
import { ref } from 'vue';
import { defineStore } from 'pinia'
import { setStorage , getStorage } from '@/utils/storage.js';

// 请求地址前缀
let baseURL = ''
if (process.env.NODE_ENV === 'development') {
    // 生产环境
    baseURL = "http://192.168.1.174:8086/"
} else {
    // 测试环境
    baseURL = "http://192.168.1.174:8086/"
}

// 请求拦截器
axios.interceptors.request.use((config) => {
    const tokenCache = getStorage('token')
    const url = sliceUrl(config.url)
    // 请求超时时间 - 毫秒
    config.timeout = 60000
    config.baseURL = baseURL
    // 自定义Content-type
    config.headers['Content-type'] = 'application/json'
    if (!(config.url == 'getVxQrcode' || config.url == 'getScanResult'||config.url == 'register')) {
        config.headers['token'] = tokenCache;
    }

    return config;
}, (error) => {
    return Promise.reject(error)
})

// 响应拦截器
axios.interceptors.response.use((response) => {
    return addPrefixToHeaderIcon(response.data)
}, (error) => {
    // 可添加请求失败后的处理逻辑
    return Promise.reject(error)
})

// 处理headerIcon的前缀
function addPrefixToHeaderIcon(data) {
    // 处理数组：递归处理每个元素
    if (Array.isArray(data)) {
      data.forEach(item => addPrefixToHeaderIcon(item));
      return;
    }
  
    // 处理对象：递归处理每个属性
    if (typeof data === 'object' && data !== null) {
      for (const key in data) {
        if (key === 'headerIcon' ||key === 'anchorIcon' && data.hasOwnProperty(key)) {
          // 在headerIcon值前添加前缀（处理各种类型）anchorIconA anchorIconB anchorIcon
          const value = data[key];
          data[key] = "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/headerIcon/" + (
            typeof value === 'string' ? value 
            : value != null ? String(value) 
            : ""
          );
        } else if (typeof data[key] === 'object' && data[key] !== null) {
          // 递归处理嵌套对象或数组
          addPrefixToHeaderIcon(data[key]);
        }
      }
    }
    return data;
  }

// axios的get请求
export function getAxios({ url, params }) {
    // 使用axios发送GET请求
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params
            // 请求成功，将返回的数据传递给resolve函数
        }).then(res => {
            if (res.code == 200) {
                resolve(res.data) 
            } else if (res.code == 40400) {
                router.push('/')
                ElMessage.error(res.code + '' + res.msg);
            } else {
                ElMessage.error(res.code + '' + res.msg);
            }
        }).catch(err => {
            reject(err)
        })
    })
}

// axios的post请求
export function postAxios({ url, data }) {
    console.log("postAxios", url, data);
    return new Promise((resolve, reject) => {
        axios.post(
            url,
            data,
            {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }
        ).then(res => {
            if (res.code == 200) {
                resolve(res.data) 
            } else if (res.code == 40400) {
                router.push('/')
                console.log(res.msg);
                ElMessage.error(res.code + '' + res.msg);
            } else {
                console.log(res.msg);
                ElMessage.error(res.code + '' + res.msg);
            }
        }).catch(err => {
            reject(err)
        })
    })
}

// export const downFile = async (urlstr, data) => {

//     // 发送请求，获取文件流
//     const response = await axios.post(urlstr, data, { responseType: 'blob' });

//     // 获取文件名（如果后端设置了 Content-Disposition）
//     const contentDisposition = response.headers['content-disposition'];
//     let fileName = 'default-file-name'; // 默认文件名
//     console.log(contentDisposition)
//     console.log(response)
//     if (contentDisposition) {
//         // 从响应头中提取文件名
//         const fileNameMatch = contentDisposition.match(/filename="(.+)"/);
//         if (fileNameMatch && fileNameMatch.length > 1) {
//             fileName = fileNameMatch[1];
//         }
//     }

//     // 创建一个临时的下载链接
//     const blob = new Blob([response.data], { type: response.headers['content-type'] });
//     const url = window.URL.createObjectURL(blob);
//     const a = document.createElement('a');
//     a.href = url;
//     a.download = fileName; // 设置下载的文件名
//     a.click();

//     // 释放 URL 对象
//     window.URL.revokeObjectURL(url);


// }
// //请求前验证
// function cheekalive() {
//     const userCache = UserStore()
//     const tokenCache = tokenStore()
//     axios.post('api/account/cheekalive', {
//         userId: userCache.user.id,
//         currcode: tokenCache.token,
//     },
//         {
//             headers: {
//                 'Content-Type': 'application/x-www-form-urlencoded'
//             }
//         }
//     ).then(res => {
//         console.log(res.data)
//         if (res.data) {

//         } else {
//             alert("账号在其他地方登录！")
//             window.location.href = '/';
//         }


//     })
// }
// //节流函数
// function throttle(func, limit) {
//     let inThrottle;
//     return function () {
//         const args = arguments;
//         const context = this;
//         if (!inThrottle) {
//             func.apply(context, args);
//             inThrottle = true;
//             setTimeout(() => inThrottle = false, limit);
//         }
//     }
// }

function sliceUrl(url) {
    const lastSlash = url.lastIndexOf('/');
    const questionMark = url.indexOf('?');
    if (questionMark == -1) {
        const result = url.slice(lastSlash + 1, url.length);
        return result;
    } else {
        const result = url.slice(lastSlash + 1, questionMark);
        return result;
    }

}


export default axios