import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '../store'
import { getToken } from '@/utils/auth'

// 创建axios实例
const service = axios.create({
    baseURL: process.env.BASE_API + '/iznaer-sbike-customer/', // api 的 base_url
    timeout: 15000, // 请求超时时间
    headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }
})

// request拦截器
service.interceptors.request.use(
    config => {
        // console.log(getToken())
        if (store.getters.token) {
            config.headers['token'] = getToken() // 让每个请求携带自定义token
        }
        return config
    },
    error => {
        console.log(error)
        Promise.reject(error)
    }
)

// response 拦截器
service.interceptors.response.use(
    response => {
        /* code为非200的抛错 */
        const res = response.data
        if (res.code !== 200) {
            // 444:Token过期找不到、过期、错误
            // 认证失败：token没有对应的用户名
            if (res.code === 444) {
                MessageBox.confirm(
                    '登录时间过长，无效Token',
                    '确定登出',
                    {
                        confirmButtonText: '重新登录',
                        cancelButtonText: '取消',
                        type: 'warning'
                    }
                ).then(() => {
                    store.dispatch('FedLogOut').then(() => {
                        location.reload() // 为了重新实例化vue-router对象 避免bug
                    })
                })
            } else {
                Message({
                    message: res.description,
                    type: 'error',
                    duration: 3 * 1000
                })
            }
            // if (res.code === 1001) {
            //     Message.error('密码错误')
            // } else if (res.code === 1002) {
            //     Message.error('账号错误')
            // } else if (res.code === 1003) {
            //     Message.error('appId错误')
            // } else {
            //     // Message.error('Unknown Error')
            //     Message({
            //         message: res.description,
            //         type: 'error',
            //         duration: 3 * 1000
            //     })
            // }
            return Promise.reject('error')
        } else {
            return response.data
        }
    },
    error => {
        console.log('request ' + error) // for debug
        Message({
            message: error.response.status + ' ' + error.response.statusText,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)

export default service
