// http.ts
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'
// import {development,production} from "@/utils/devSever"
import qs from 'qs'
// import MD5 from 'js-md5';
import { open4 } from "./hint"
import Router from '../router/index'
// const router = Router;  //路由全局对象
// import "./dateRormat"  //导出时间原型添加事件
let url = process.env.VUE_APP_BASE_API
// if (process.env.NODE_ENV === 'development') {
//      url = development.xhr//开发环境

// } else if (process.env.NODE_ENV === 'production') {
//     url = production.xhr;//生产环境  //正式环境+
// }

// 3.创建自定义axios  限制响应时间
axios.create({
    
    // baseURL: url,
    timeout: 3000,
})


//请求拦截器
axios.interceptors.request.use( (config:AxiosRequestConfig|any) => {
    // console.group("本次请求地址为", config)  //请求提示
    // 在发送请求之前做些什么，例如加入token
    // if (config.data) {
    //     console.group("本次请求地址为", config.data.split("&")[0].split("=")[1])  //请求提示
    // } else {
    //     console.group("本次请求地址为", config.params.code)  //请求提示
    // }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

//响应拦截器
axios.interceptors.response.use(function (response:AxiosResponse) {
    // 在接收响应做些什么，例如跳转到登录页
    // console.log(response, "我是响应拦截器")
    const router = Router;  //路由全局对象

    let status = response.status;
    // console.log(response,"sssssssfafafafafaaaf");
    
    // if (status === 200) {
    //     let code = response.data.Code;

    //     if (code == "") {
    //         // console.log("调用成功")
    //     } else if (code == -10000) {
    //         open4("接口调用失败：" + response.data.Message)
    //         return;
    //     } else if (code == 'user login Error') {
    //         open4("登陆过期：" + response.data.Message)
    //         setTimeout(() => {
    //             router.push('/Login')
    //         }, 1000);
    //         return;
    //     }
    // } else if (status === 401) {
    //     open4("接口调用失败：" + response.data.Message)
    //     return;

    // } else if (status === 500) {
    //     open4("接口调用失败：" + response.data.Message)
    //     return;
    // }

    // if (response.data.success == 'false') {
    //     open4("接口调用失败：" + response.data.Message)
    //     return;
    // }
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});


export function get(staurl: string, data: any = '') {
    // let strTime = (<any>new Date()).Format("yyyyMMddhhmmss")
    // let strPara = '{"datetime":"' + strTime + '",' + data + '}';
    // console.log(strPara);
    // let password = "RicardPwd";
    // let strSign = password + strPara + password;
    // console.log(strSign);
    // strSign = MD5(strSign);
    // let strData = 'code=' + code + '&sign=' + strSign + '&para=' + strPara;

    let _url = url+staurl //"?" + strData;

    return new Promise((resolve, rejects) => {
        let header = { //请求头设置
            "Access-Control-Allow-Origin": "*"
        }
        axios({
            url: _url,//在线跨域请求
            method: "get",//默认是get请求
            headers:header,
            params: data
        }).then(function (val) {
            // console.log(val) // axios会对我们请求来的结果进行再一次的封装（ 让安全性提高 ）
            resolve(val.data)
        }).catch(function (err) {
            // console.log(err)
            rejects(err)
        })

    })
}


export function put(staurl: string, data: any = '') {
    // let strTime = (<any>new Date()).Format("yyyyMMddhhmmss")
    // let strPara = '{"datetime":"' + strTime + '",' + data + '}';
    // console.log(strPara);
    // let password = "RicardPwd";
    // let strSign = password + strPara + password;
    // console.log(strSign);
    // strSign = MD5(strSign);
    // let strData = 'code=' + code + '&sign=' + strSign + '&para=' + strPara;

    let _url = url+staurl //"?" + strData;

    return new Promise((resolve, rejects) => {
        let header = { //请求头设置
            "Access-Control-Allow-Origin": "*"
        }
        axios({
            url: _url,//在线跨域请求
            method: "put",//默认是get请求
            headers:header,
            params: data
        }).then(function (val) {
            // console.log(val) // axios会对我们请求来的结果进行再一次的封装（ 让安全性提高 ）
            resolve(val.data)
        }).catch(function (err) {
            // console.log(err)
            rejects(err)
        })

    })
}


export function post(code: string, data: any = "", method: string = "POST", isFile: boolean = false, file: File) {
    let strTime = (<any>new Date()).Format("yyyyMMddhhmmss")
    let flag = sessionStorage.getItem("Order_management_Office") || false
    if (!flag) {
        open4("禁止非法post跳转")
        Router.push('/login') //路由全局对象   如果没有  内存存的sessionStorage那么默认是非法跳转直接弹回登录页
        return
    }

    let userId = JSON.parse(sessionStorage.getItem("Order_management_Office")!).UserID
    let Token = JSON.parse(sessionStorage.getItem("Order_management_Office")!).Token
  
    let strPara = '';
    if (data == '') {
        strPara = '{"datetime":"' + strTime + '","userid":"' + userId + '","token":"' + Token + '"}';
    } else {
        strPara = '{"datetime":"' + strTime + '","userid":"' + userId + '","token":"' + Token + '",' + data + '}';
    }
    // console.log(strPara);
    let password = "RicardPwd";
    let strSign = password + strPara + password;
    // console.log(strSign);
    // strSign = MD5(strSign);
    // console.log(strSign);

    // let tmpPara = (method == "POST") ? '' : strPara //post url后para为空
    let newUrl = url
    // strData = 'code=' + code + '&sign=' + strSign + '&para=' + tmpPara;
    // console.log(strData);
    let _url = newUrl //+ "?" + strData;
    let METHOD = method || "POST"




    return new Promise((resolve, rejects) => {
        if (userId == "" || Token == "" || userId == undefined || Token == undefined) {
            let tip = "登录失效，请重新登录!"
            console.log("*************我进来了2*******************")
            rejects(tip)
            open4("禁止非法post跳转")
            Router.push('/Login') //路由全局对象   如果没有  内存存的cooike那么默认是非法跳转直接弹回登录页
            return
        }
        let header = { //请求头设置
            "Content-Type": "application/x-www-form-urlencoded",
            "Access-Control-Allow-Origin": "*"
        }
        let params:any = {}
        if (!isFile) {
            params = {   //此处是传参
                code,
                sign: strSign,
                para: strPara
            }
            // 对数据进行序列化操作
            data = qs.stringify(params)
        }
        // 处理表单结果中文件的操作
        if (isFile) {  //如果包含文件得传参方式

            params = {   //此处是传参
                code,
                sign: strSign,
                para: strPara,
                file
            }

            // 设置请求头
            header = {
                "Content-Type": "multipart/form-data",
                "Access-Control-Allow-Origin": "*"
            }
            // 对数据进行序列化操作
            data = new FormData();
            for (let i in params) {
                data.append(i, params[i])
            }

        }

        axios({
            url: _url,
            headers: header,
            method: METHOD,
            data: data
        }).then(function (res) {
            // console.log(val) // axios会对我们请求来的结果进行再一次的封装（ 让安全性提高 ）
            resolve(res.data)
        }).catch(function (err) {
            // console.log(err)
            rejects(err)
        })


    })
}


