/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from "axios";
import QS from "qs";
import {Toast} from "vant";
import router from "../router/index";
import {assign} from "vue-resource/src/util";

// 环境的切换
// if (process.env.NODE_ENV == 'development') {
//  axios.defaults.baseURL = 'http://bxu2341830117.my3w.com/api.php/';
// } else if (process.env.NODE_ENV == 'debug') {
//  axios.defaults.baseURL = 'http://bxu2341830117.my3w.com/api.php/';
// } else if (process.env.NODE_ENV == 'production') {
//  axios.defaults.baseURL = 'http://bxu2341830117.my3w.com/api.php/';
// }
// console.log(process.env)

// axios.defaults.baseURL = 'http://192.168.0.119';
// axios.defaults.baseURL = 'http://guahao.hzyqtkj.com:9081';
//axios.defaults.baseURL = 'http://gzh.btlsoln.com:9081/WGZH/';
// axios.defaults.baseURL = "http://127.0.0.1:48080/"


axios.defaults.baseURL = 'https://nxwj.btlsoln.com/nxgzh';
// axios.defaults.baseURL = 'https://192.168.111.93:8089';

// axios.defaults.baseURL = "http://101.132.179.117/gzhsvr";


// 请求超时时间
axios.defaults.timeout = 30000;

// post请求头
axios.defaults.headers.post["Content-Type"] =
    "application/x-www-form-urlencoded;charset=UTF-8";
axios.defaults.headers.post["tenant-id"] = "1";

axios.defaults.headers.get["tenant-id"] = "1";

// 请求拦截器
axios.interceptors.request.use(
    (config) => {
        // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
        // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
        // 在请求之前做某事发送
        // if (store.state.login.token) {// 判断是否存在token,如果存在,则每个http header都加上 token
        //   // config.headers.Authorization = `Bearer ${store.state.login.token}`;
        // }else{
        // }
        //   // const token = store.state.token;
        //   // token && (config.headers.Authorization = token);
        return config;
    }
    //  error => {
    //   // return Promise.error(error);
    // }
);

// 响应拦截器
axios.interceptors.response.use(
    (response) => {
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    // 服务器状态码不是200的情况
    (error) => {
        if (error.response.status) {
            switch (error.response.status) {
                // 401: 未登录
                // 未登录则跳转登录页面，并携带当前页面的路径
                // 在登录成功后返回当前页面，这一步需要在登录页操作。
                case 401:
                    //  router.replace({
                    //   path: '/login',
                    //   query: { redirect: router.currentRoute.fullPath }
                    //  });
                    break;
                // 403 token过期
                // 登录过期对用户进行提示
                // 清除本地token和清空vuex中token对象
                // 跳转登录页面
                case 403:
                    //  Toast({
                    //   message: '登录过期，请重新登录',
                    //   duration: 1000,
                    //   forbidClick: true
                    //  });
                    // 清除token
                    //  localStorage.removeItem('token');
                    //  store.commit('loginSuccess', null);
                    // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                    //  setTimeout(() => {
                    //   router.replace({
                    //    path: '/login',
                    //    query: {
                    //     redirect: router.currentRoute.fullPath
                    //    }
                    //   });
                    //  }, 1000);
                    break;
                // 404请求不存在
                case 404:
                    //  Toast({
                    //   message: '网络请求不存在',
                    //   duration: 1500,
                    //   forbidClick: true
                    //  });
                    break;
                // 其他错误，直接抛出错误提示
                default:
                //  Toast({
                //   message: error.response.data.message,
                //   duration: 1500,
                //   forbidClick: true
                //  });
            }
            //    return Promise.reject(error.response);
        }
    }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
    // 将token和userId添加到请求参数中
    const paramsWithAuth = {
        ...params,
        token: localStorage.getItem("token"),
        userId: localStorage.getItem("userid"),
    };
    
    return new Promise((resolve, reject) => {
        axios
            .get(url, {
                params: paramsWithAuth,
            })
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err.data);
            });
    });
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
//
export function post(url, params, headers = {}) {
    let paramsData = {
        ...params,
        token: localStorage.getItem("token"),
        userId: localStorage.getItem("userid"),
    };
    //let paramsData = {...params,token:"user202109271951012028847c3328cb-0c41-4677-8a09-df65e127502b",userId:"68"}
    //let paramsData = {...params}

    return new Promise((resolve, reject) => {
        console.log(url);
        console.log(paramsData);
        axios
            .post(url, QS.stringify(paramsData),{
                headers: {
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
                "tenant-id": "1",
                ...headers  // 合并自定义 headers
            }
            })
            // axios.post(url, JSON.stringify(paramsData))
            .then((res) => {
                //alert("res:" + JSON.stringify(res.data.data));
                // console.log(router.currentRoute.fullPath )
                if (res.data.code == 200) {
                    resolve(res.data);
                } else if (res.data.code == 110011) {
                    // console.log(router.currentRoute.fullPath)

                    //post校验token，校验失败跳转登录界面
                    router.replace({
                        path: "/Login",
                        query: {
                            redirect: router.currentRoute.fullPath,
                        },
                    });
                } else if (res.data.code == 100013) {
                    resolve(res.data);
                } else if (res.data.code == 888) {
                    resolve(res.data);
                } else if (res.data.code == 120001) {
                    // Toast(res.data.message);
                    resolve(res.data);
                } else {
                    resolve(res.data);
                    // Toast(res.data.message);
                }
            })
            .catch((err) => {
                console.log("promise catch err");
                reject(err.data);
                //console.log('promise catch err');
            });
    });
}
// request.js 文件中的 postFile 方法
// request.js 文件中的 postFile 方法优化
// 优化 postFile 方法确保认证信息正确传递
// 确保 postFile 方法正确处理 FormData
export function postFile(url, params) {
    let formData;
    if (params instanceof FormData) {
        // 如果传入的已经是 FormData 对象，直接使用
        formData = params;
        console.log('Received FormData with keys:', Array.from(formData.keys()));
    } else {
        // 如果传入的是普通对象，创建新的 FormData
        formData = new FormData();
        const token = localStorage.getItem("token");
        const userId = localStorage.getItem("userid");
        
        if (token && token !== 'null') {
            formData.append('token', token);
        }
        if (userId && userId !== 'null') {
            formData.append('userId', String(userId));
        }
        
        // 添加其他参数
        Object.keys(params).forEach(key => {
            if (params[key] instanceof File || params[key] instanceof Blob) {
                formData.append(key, params[key]);
            } else {
                formData.append(key, params[key]);
            }
        });
    }

    return new Promise((resolve, reject) => {
        axios.post(url, formData, {
            headers: {
                'tenant-id': '1'
                // 不要手动设置 Content-Type，让浏览器自动设置
            }
        })
        .then((res) => {
            if (res.data.code == 200) {
                resolve(res.data);
            } else if (res.data.code == 110011) {
                router.replace({
                    path: "/Login",
                    query: {
                        redirect: router.currentRoute.fullPath,
                    },
                });
            } else if (res.data.code == 100013) {
                resolve(res.data);
            } else if (res.data.code == 888) {
                resolve(res.data);
            } else if (res.data.code == 120001) {
                Toast(res.data.message);
                resolve(res.data);
            } else {
                resolve(res.data);
                Toast(res.data.message);
            }
        })
        .catch((err) => {
            console.log("promise catch err");
            reject(err.data);
        });
    });
}
export function post3(url, params) {
    //let paramsData = {...params,token:localStorage.getItem("token"),userId:localStorage.getItem("userid")}
    let paramsData = {
        ...params,
        token: "user20210929194232655712a2973dec-b782-4a3d-8070-c5f6e7e820b3",
        userId: "71",
    };
    //let paramsData = {...params,token:"user202109271951012028847c3328cb-0c41-4677-8a09-df65e127502b",userId:"68"}
    console.log(paramsData);
    return new Promise((resolve, reject) => {
        axios
            .post(url, QS.stringify(paramsData))
            .then((res) => {
                console.log(res.data);
                // console.log(router.currentRoute.fullPath )
                if (res.data.code == 200) {
                    resolve(res.data);
                } else if (res.data.code == 110011) {
                    // console.log(router.currentRoute.fullPath)
                    router.replace({
                        path: "/Login",
                        query: {
                            redirect: router.currentRoute.fullPath,
                        },
                    });
                } else if (res.data.code == 888) {
                    resolve(res.data);
                } else {
                    resolve(res.data);
                    Toast(res.data.message);
                }
            })
            .catch((err) => {
                console.log("promise catch err");
                reject(err.data);
            });
    });
}

export function post2(url, params) {
    return new Promise((resolve, reject) => {
        // let urlDefault = 'http://192.168.0.119';
        axios
            .post(url, params, {headers: {"Content-Type": "text/xml"}})
            .then((res) => {
                // console.log(res.data)
                if (res.status == 200) {
                    resolve(res.data);
                } else {
                    // Toast(res.data.message);
                }
            })
            .catch((err) => {
                // reject(err.data)
                // console.log('promise catch err');
            });
    });
}

export function post4(url, params) {
    //let paramsData = {...params, token: localStorage.getItem("token"), userId: localStorage.getItem("userid")}
    // let paramsData = {...params, token: "user20210929194232655712fb853cde-7f2b-4b09-a140-b0b188389be7", userId: "71"}
    //let paramsData = {...params,token:"user202109271951012028847c3328cb-0c41-4677-8a09-df65e127502b",userId:"68"}
    // params["token"] =
    //     "user20210929194232655712fb853cde-7f2b-4b09-a140-b0b188389be7";
    // params["userId"] = "71";
    // let paramsData = {
    //     ...params,
    //     token: localStorage.getItem("token"),
    //     userId: localStorage.getItem("userid"),
    // };
    console.log(params);
    return new Promise((resolve, reject) => {
        axios
            .post(url, params, { headers: {
            "Content-Type": "application/json",
            "X-User-Id": localStorage.getItem("userid"),
            "X-Token": localStorage.getItem("token")
        }})
            .then((res) => {
                // console.log(res.data)
                // console.log(router.currentRoute.fullPath )
                if (res.data.code == 200) {
                    resolve(res.data);
                }
                 else if (res.data.code == 110011) {
                    // console.log(router.currentRoute.fullPath)
                    router.replace({
                        path: "/Login",
                        query: {
                            redirect: router.currentRoute.fullPath,
                        },
                    });
                } else if (res.data.code == 888) {
                    resolve(res.data);
                } else {
                    resolve(res.data);
                    Toast(res.data.message);
                }
            })
            .catch((err) => {
                console.log("promise catch err");
                reject(err.data);
            });
    });
}
