"use strict";
import {config} from "../config.js";
import {fullMap} from "../fullMap.js";
import {util} from "./util.js";

class httpUtil {
    /**
     * @param obj.url 不能为空
     * @param obj.params 不能为空
     * @param obj.config 允许为空 空则自动设置token请求头，不为空则按传入的请求接口（请求不需要登录的接口设置"no token"）
     * @param obj.isClientCache 允许为空 是否将结果集存到临时缓存里
     * @param obj.errorCallback 允许为空 失败回调函数
     * @param successCallback 不能为空 成功回调函数
     * @returns {Promise<unknown>|*} 返回一个 Promise（如果请求是异步的），或直接返回结果（如果请求是同步的）。
     */
    static post(obj,successCallback){
        if(util.isNull(obj.config)){
            obj.config=config.getRequestConfig();//获取token
        }
        if(util.isNull(obj.isClientCache)){
            obj.isClientCache=false;//默认false 不存
        }
        if(obj.isClientCache){//结果是否允许放集合里
            return new Promise((resolve, reject) => {
                let responseKey=JSON.stringify(obj.params);
                let response=fullMap.getObj(responseKey);
                if(response!=undefined){
                    successCallback(response)
                    resolve();
                }else{
                    return axios.post(obj.url,obj.params,obj.config).then((response)=> {
                        if(response.data.status=='ok'){
                            if(obj.isClientCache){
                                fullMap.push(responseKey,response);//将每次请求的数据放集合里，每次新的请求都校验一下，请求参数一致则无需二次请求
                            }
                            successCallback(response)
                        }else{
                            fullMap.getObj('mask').hide();
                            if(obj.errorCallback!=undefined){
                                obj.errorCallback(response);
                            }
                        }
                        resolve();
                    });
                }
            })
        }else{
            return axios.post(obj.url,obj.params,obj.config).then((response)=> {
                if(response.data.status=='ok'){
                    successCallback(response)
                }else{
                    let mask=fullMap.getObj('mask');
                    if(mask!=null){
                        fullMap.getObj('mask').hide();
                    }
                    if(obj.errorCallback!=undefined){
                        obj.errorCallback(response);
                    }
                }
            });
        }
    }
}
export { httpUtil }