/**
 * 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 { usePythonBridge, } from '@/utils/pythonBridge'
import { ref } from 'vue';
import { defineStore } from 'pinia'
import { tokenStore,UserStore } from '@/stores/notice'




const { stopScript } = usePythonBridge();


// 请求地址前缀
let baseURL = ''
if (process.env.NODE_ENV === 'development') {
    // 生产环境
    baseURL = "https://crawlclient.api.yolozs.com"
    // baseURL = "http://47.79.98.113:8101"
    // baseURL = "http://192.168.0.103:8085/"
    // baseURL = "http://192.168.1.144:8101"
} else {
    // 测试环境
    // baseURL = "http://120.26.251.180:8085/"
    // 开发环境
    baseURL = "https://crawlclient.api.yolozs.com"
    // baseURL = "http://47.79.98.113:8101"
    // baseURL = "http://192.168.1.144:8101"
    // baseURL = "http://api.tkpage.vvtiktok.cn"
}

// 请求拦截器
axios.interceptors.request.use((config) => {
    const tokenCache = tokenStore()
    console.log("config", config)
    const url = sliceUrl(config.url)
    console.log("url", url)
    // 请求超时时间 - 毫秒
    config.timeout = 60000
    config.baseURL = baseURL
    // 自定义Content-type
    config.headers['Content-type'] = 'application/json'
    if (!(config.url == 'bigbrother-doLogin' || config.url == 'get-id-by-name')) {
        config.headers['vvtoken'] = tokenCache.token;
    }

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

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