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

import { ElMessage } from 'element-plus';
// import { usePythonBridge, } from '@/utils/pythonBridge'

// const { stopScript } = usePythonBridge();

const specialBaseURL = 'http://ai.zhukeping.com'
const specialUrlPrefixes = ['chat', 'translation', 'translationToChinese']  // 示例路径前缀
// 请求地址前缀
let baseURL = ''
if (process.env.NODE_ENV === 'development') {
    // 生产环境
    // baseURL = "https://api.tkpage.yolozs.com"
    // baseURL = "http://192.168.1.155:8101"
    baseURL = "https://crawlclient.api.yolozs.com"
} else {
    // 测试环境
    // baseURL = "http://120.26.251.180:8085/"
    // 开发环境

    baseURL = "https://crawlclient.api.yolozs.com"
    // baseURL = "http://api.tkpage.vvtiktok.cn"
}

// 请求拦截器
axios.interceptors.request.use((config) => {
    console.log("config", config)
    const url = sliceUrl(config.url)
    console.log("url", url)
    if (!(config.url == 'doLogin' || config.url == 'get-id-by-name')) {
        config.headers['vvtoken'] = getToken();
    }

    // 判断是否是特殊接口
    const isSpecial = specialUrlPrefixes.some(prefix => config.url.includes(prefix));
    console.log("isSpecial", isSpecial)
    // 根据接口设置 baseURL
    config.baseURL = isSpecial ? specialBaseURL : baseURL;
    console.log("config.baseURL", config.baseURL)
    // 请求超时时间 - 毫秒
    config.timeout = 60000
    // config.baseURL = baseURL
    // 自定义Content-type
    config.headers['Content-type'] = 'application/json'
    return config;
}, (error) => {
    return Promise.reject(error)
})

// 响应拦截器
axios.interceptors.response.use((response) => {
    console.log("response", response.data)
    if (response.data.code == 0 || response.data.code == 200) {
        // console.log("response", response.data.data)
        return response.data.data
    } else if (response.data.code == 40400) {
        // stopScript();
        router.push('/')
        ElMessage.error(response.data.code + '' + response.data.message + 1);
    } else {

        ElMessage.error(response.data.code + '' + response.data.message + 2);
        Promise.reject(response.data.code + '' + response.data.message)
    }

}, (error) => {
    // 可添加请求失败后的处理逻辑
    return Promise.reject(error)
})



// axios的get请求
export function getAxios({ url, params }) {
    // 使用axios发送GET请求
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params
            // 请求成功，将返回的数据传递给resolve函数
        }).then(res => {
            resolve(res)
            // 请求失败，将错误信息传递给reject函数
        }).catch(err => {
            ElMessage.error(err + 3);
            reject(err)

        })
    })
}

// axios的post请求
export function postAxios({ url, data }) {
    return new Promise((resolve, reject) => {
        axios.post(
            url,
            data,
            {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }
        ).then(res => {
            resolve(res)
        }).catch(err => {
            ElMessage.error(err + 4);
            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() {
//     axios.post('api/account/cheekalive', {
//         userId: getUser().userId,
//         currcode: getToken(),
//     },
//         {
//             headers: {
//                 'Content-Type': 'application/x-www-form-urlencoded'
//             }
//         }
//     ).then(res => {
//         console.log(res.data)
//         if (res.data) {

//         } else {
//             stopScript();
//             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