import axios from 'axios'
import store from '../store'
// 创建axios请求实例
// const request = axios.create({
//     baseURL: axiosBaseUrl, 
//     timeout: 1000,
//     headers: {
//         'Content-Type': 'application/json; charset=utf-8'
//     }
// })
axios.defaults.baseURL = typeof axiosBaseUrl == "undefined" ? "" : axiosBaseUrl; // 设置跨域代理接口统一的前置地址
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';

// 添加请求拦截器
axios.interceptors.request.use(function (request) {
    // 在发送请求之前做些什么
    if(request.method == 'post'){
        request.params = {};
    }
    return request
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 只返回数据
    return response.data
}, function (error) {
    if(error.response == null){
        throw error;
    }
    const status = error.response.status
    if (status >= 500) {
        alert('服务繁忙请稍后再试')
    } else if (status >= 400) {
        alert(error.response.data.message)
    }
    // 对响应错误做点什么
    console.dir(error)
    return Promise.reject(error)
})

function _toChangeData(data){
    let dataArray = [];
    for(let key in data){
        dataArray.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key]));
    }
    return dataArray.join("&");
}

//可能需要更改，暂时用不到
const get = (params) => {

    return axios({
        method: "get",
        url: params.url,
        params: params.params
    });
}

const post = (params) => {
    let postConfig = {
        method: "post",
        url: params.url,
        data: params.data
    }
    //从vuex中获取sessionId
    postConfig.data.sid = store.state.sessionId;
    postConfig.data = _toChangeData(postConfig.data);
    return axios(postConfig);
}

const aslp = (params) => {
    // {
    //     portalUrl : "",
    //     authentication : store.state.sessionId,
    //     sourceAppId : "appid",
    //     aslp : "aslp://XXXX",
    //     params :{
    //         aa:1,
    //         bb:2
    //     }
    // }
    let datas = {
        authentication : store.state.sessionId,
        sourceAppId : params.sourceAppId,
        aslp : params.aslp,
    }
    Object.assign(datas,params.params)
    let postConfig = {
        method: "post",
        url: params.portalUrl,
        params: datas
    }
    postConfig.data = _toChangeData(postConfig.data);
    return axios(postConfig);
}
// const delete = (url, data) => request.delete(url, data)
// const head = (url, data) => request.head(url, data)
// const options = (url, data) => request.options(url, data)
// const put = (url, data) => request.put(url, data)
// const patch = (url, data) => request.patch(url, data)
export default {
    get,
    post,
    aslp
}