import axios from 'axios'
import { MessageBox } from 'element-ui'
import RequestManager from './RequestManager.js';

export const BASE_HOST = "/gjjs/"
export const BASE_URI=BASE_HOST+"";

const instance = axios.create({
    baseURL: BASE_URI,
    timeout: 5000,
    method: 'post',
  });

const CODE_KEY = "respCode"
const MESSAGE_KEY = "respMsg"

const requestManager = new RequestManager()

export default class Api 
{
    static pget(url,data)
    {
        let token = window.sessionStorage.token
        let userId =  window.sessionStorage.userId
        let headers = {userId,token,"terminal":"WEB"};
        if(url!= `${BASE_URI}login` && token)
            headers.token = token;
        return new Promise( (resolve, reject) =>{
            axios.get(url,data,{
                headers,
                
                timeout: 50000,
            })
            .then(response=>{
                const {data} = response;
                resolve(data)
            })
            .catch(error=> {
                if (error.response) {
                  // The request was made and the server responded with a status code
                  // that falls out of the range of 2xx
                  console.log(error.response.data);
                  console.log(error.response.status);
                  console.log(error.response.headers);
                  resolve(error.response.status);
                } else if (error.request) {
                  // The request was made but no response was received
                  // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
                  // http.ClientRequest in node.js
                  console.log(error.request);
                  resolve('error.request');
                } else {
                  // Something happened in setting up the request that triggered an Error
                  console.log('Error', error.message);
                  resolve(error.message);
                }
                console.log(error.config);
              });
            
        })
    }
  	static logout(){
        console.log('asdasdasdasdasd')
        window.location.href="#/login";
    }
    static async _post(url,data,method="post")
    {
        let token = window.sessionStorage.token
        let userId =  window.sessionStorage.userId
        let headers = {userId,token,"terminal":"WEB"};
        if(url!= `${BASE_URI}login` && token)
            headers.token = token;
        if (typeof data === "function") {
          data = await data()
        }
        return new Promise( (resolve, reject) =>{
            axios.post(url,data,{
                headers,
                method,
                timeout: 50000,
            })
            .then(response=>{
                const {data} = response;
                if(data && data[CODE_KEY] != SUCCESS)
                {
                    console.log("错误码："+data[CODE_KEY]+" 错误信息："+data[MESSAGE_KEY])
                }
                if(data && data[CODE_KEY] == 'L0003'){		
                    window.sessionStorage.removeItem("token")
                    window.sessionStorage.removeItem("userId")				
					          MessageBox.alert({
                            title:'会话超时',
                            message:'即将退出，请重新登录',
                            showClose:false,
							callback:()=>{
                                window.location.href= "/?#/"+"login"
                            }
                    })
                    return ;
                }
                resolve(data)
            })
            .catch(error=> {
                if (error.response) {
                  // The request was made and the server responded with a status code
                  // that falls out of the range of 2xx
                  console.log(error.response.data);
                  console.log(error.response.status);
                  console.log(error.response.headers);
                  resolve({[CODE_KEY]:'500',[MESSAGE_KEY]:error.response.status});
                } else if (error.request) {
                  // The request was made but no response was received
                  // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
                  // http.ClientRequest in node.js
                  console.log(error.request);
                  resolve({[CODE_KEY]:'501'});
                } else {
                  // Something happened in setting up the request that triggered an Error
                  console.log('Error', error.message);
                  resolve({[CODE_KEY]:'502',[MESSAGE_KEY]:error.message});
                }
                console.log(error.config);
              });
            });
    }
    static _get(url,data)
    {
        // return this._post(url,data,"get");
        return requestManager.pushRequest(this._post.bind(this, BASE_URI+url, data, "get"))
    }
    static post(url,data)
    {
      // return this._post(BASE_URI+url,data)
      return requestManager.pushRequest(this._post.bind(this, BASE_URI+url, data))
    }

    static get(url,data)
    {
      return this._get(BASE_HOST+url,data)
    }
}