import axios from 'axios'
import qs from 'qs'
import util from '@/js/util'
import { TIME_OUT } from '@/config'
import router from '@/router';
import { Message } from 'element-ui'
import { showLoading, hideLoading } from './loading';

// 网络请求前拦截器
axios.interceptors.request.use(resquest => {
    console.log(resquest)
    showLoading();
//   if(resquest && resquest.data && typeof (resquest.data) === 'object'){
    // 若每个接口需要添加时间戳时
    // resquest.data.currentDateTime = util.getFormatDate('yyyy-mm-dd hh:mm:ss')
//   }
  return resquest
}, error => {
    console.log(error)
    return Promise.reject(error)
})

// 网络响应后拦截器
// 响应拦截器
axios.interceptors.response.use(
    response => {
        hideLoading();
        if (response && response.status === 200 || response && response.status === 304) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    // 服务器状态码不是200的情况
    error => {
        hideLoading();
        if (error.response.status) {
            switch (error.response.status) {
                // 401: 未登录
                // 未登录则跳转登录页面，并携带当前页面的路径
                // 在登录成功后返回当前页面，这一步需要在登录页操作。
                case 401:
                Message.error('登陆信息失效,请重新登录')
                   localStorage.removeItem("accessToken")
                    router.replace({
                        path: '/',
                        query: { redirect: router.currentRoute.fullPath }
                    });
                    break;
                // 403 token过期
                // 登录过期对用户进行提示
                // 清除本地token和清空vuex中token对象
                // 跳转登录页面
                case 403:
                Message.error('登陆失效,请重新登录')
                    // 清除token
                    localStorage.removeItem("accessToken")
                    // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                    setTimeout(() => {
                        router.replace({
                            path: '/',
                            query: {
                                redirect: router.currentRoute.fullPath
                            }
                        });
                    }, 1000);
                    break;
                // 404请求不存在
                case 404:
                Message.error('404 Not Found')
                break;
                case 500:
                Message.error('系统繁忙，请稍后重试')
                break;
                // 其他错误，直接抛出错误提示
                default:
                Message.error('网络错误')
            }
            return Promise.reject(error.response);
        }
        // else {
        //     Message.error('登陆失效,请重新登录')
        //     localStorage.removeItem("accessToken")
        //      router.replace({
        //          path: '/',
        //          query: { redirect: router.currentRoute.fullPath }
        //      });
        // }
    }
);
// 数据统一处理来自网络及服务器的错误
function checkStatus (response) {
    console.log("11123456")
    if (response && response.status === 200 || response && response.status === 304){
        // Message.success('请求成功')
        return response.data
    }
    // if (response && response.status === 401){
    //     localStorage.removeItem("accessToken")
    //     router.replace({
    //         path: '/' // 到登录页重新获取token
    //     })
    //     Message.error('登陆失效,请重新登录')
    // }  
    // if (response && response.status === 404){
    //     router.replace({
    //         path: '*' // 到登录页重新获取token
    //     })
    //     Message.error('404 Not Found')
    // }
    // if (response && response.status === 500){
    //     router.replace({
    //         path: '*' // 到登录页重新获取token
    //     })
    //     Message.error('服务器问题')
    // } else {
    //     Message.error('登陆失效,请重新登录')
    //     localStorage.removeItem("accessToken")
    //     router.replace({
    //         path: '/' // 到登录页重新获取token
    //     })
    //     return response && response.statusText || '网络错误'
    // }
}

// 处理来自程序的异常
function checkCode (response) {
    console.log("chucuole")
    if (response.status && response.status !== 'ok'){
        response.error = response.error || '出错了！'
    }
    return response
}
let accessToken = localStorage.getItem("accessToken")
// let accessToken = "evbOfyzBDlwwi2Tn8KTc5h3sWKsbrpbiazL7wYh7vyTs9KtJ1vANq6j3DmOwFjbL"

// export default ({method = 'post', url = '', params = {}}) => {
// 	return new Promise((resolve, reject) => {
// 		axios[method.toLowerCase()](url, params).then(response => {
// 			resolve(response)
// 		}, err => {
// 			reject(err)
// 		}).catch(err => {
// 			reject(err)
// 		})
// 	})
// }
export default {
    Tokenpost (url, data) {
        const params = data;
        return axios({
            method:'post',
            // url,
            url: `${url}?${qs.stringify(params)}`,
            timeout: TIME_OUT,
            data,
            // data: qs.stringify(data),
            headers:{
                'Content-Type': 'application/json',
                // 'Content-Type':'application/x-www-form-urlencoded'
            }
        }).then(checkStatus).then(checkCode)
    },
    post (url, data) {
		// debugger
        if (!accessToken){
            accessToken = localStorage.getItem("accessToken");
        }
        const params = {accessToken};
        return axios({
            method:'post',
            // url,
            url: `${url}?${qs.stringify(params)}`,
            timeout: TIME_OUT,
            data,
            // data: qs.stringify(data),
            headers:{
                'Content-Type': 'application/json',
                // 'Content-Type':'application/x-www-form-urlencoded'
            }
        }).then(checkStatus).then(checkCode)
    },
    get (url, params){
        return axios({
            method: 'get',
            url: `${url}?${qs.stringify(params)}`,
            timeout: TIME_OUT,
            headers:{
                'Content-Type':'text/plain',
            },
        }).then(checkStatus).then(checkCode)
    },
}

