// const basePath = 'http://47.110.94.59/gateway'
// const basePath = 'https://dev.cloud-dahua.com'
import utils from './utils.js'
import config from '../config.js'

const instance = axios.create({
    timeout: 10000
})
const urlHandle = function(method, url, param) {
    let queryStr = ''
    let data = param || {}
    if (method !== 'get') {
        return url
    }
    Reflect.ownKeys(data).forEach((one, index) => {
        let preStr = ''
        if (index) {
            preStr = '&'
        }
        queryStr = `${queryStr}${preStr}${one}=${data[one]}`
    })
    return queryStr ? `${url}?${queryStr}` : url
}
/**
 * @method resetAjax ()ajax方法的封装
 * @param param.method 请求的方法
 * @param param.url 请求的地址
 * @param param.data 请求的数据
 * @param param.onSuccess 成功时需要的回调
 * @param param.onError 错误时需要的回调
 * @param param.sTipStr 成功时的提示
 * @param param.eTipStr 错误时的提示
 * @param param.isSNoTip   true说明成功的不需要弹提示,默认为false
 * @param param.isENoTip   true说明不需要错误的提示信息,默认为false
 * @param param.isNoLock true代表不需要锁屏
 * @param param.isNoToken true代表不需要传token验证
 * @param param.automaticQuery true 代表get请求时自动拼接query
 * @param param.rootPath true 代表请求时不需要拼接本地IP和起的端口号,false代表需要,默认为false
 */
export default (param) => {
    let path = param.rootPath ? param.url : config.base_url + param.url
    let url = param.automaticQuery ? urlHandle(param.method, path, param.data) : path
    instance.defaults.headers.common['Accept-Language'] = 'zh-CN'
    instance.defaults.headers.common['timeOffset'] = new Date().getTimezoneOffset() * 60 * 1000
    //防重防攻击 时间戳
    instance.defaults.headers.common['timestamp'] = +new Date()
    //防重防攻击 随机数
    instance.defaults.headers.common['nonce'] = `web-${utils.guid()}-${+new Date()}`

    let headers = param.headers || {}

    if ((sessionStorage.token || localStorage.token) && !param.isNoToken) {
        let token = sessionStorage.token ? sessionStorage.token : localStorage.token
        if(param.url.includes('access_token=')) {
            headers.Authorization = 'Basic ' + 'YnJvd3Nlcjpicm93c2Vy'
        } else {
            headers.Authorization = 'Bearer ' + token
        }
    }
    instance({
        method: param.method,
        url: url,
        data: param.data || {},
        params: param.data && param.data.params ? param.data.params : {},
        headers: headers,
        timeout: param.timeout || 10000
    }).then(function (res) {
        res = utils.decodeObj(res)
        if (res.data.success) {
            param.onSuccess && param.onSuccess(res)
        } else {
            console.log('ajaxError================')
            param.onError && param.onError(res)
        }
    }).catch(function (e) {
        param.onError && param.onError(e)
        console.log('ajaxError================' + url + e)
    })
}