import { Config } from "./config.js";
import { Token } from "./token.js";

class Base {
    constructor() {
        this.baseRequestUrl = Config.userUrl;
        this.serviceRequestUrl = Config.serviceUrl;
        this.jgRequestUrl = Config.jgUrl;

    }
    
	
	// 文件上传
	uploadFileByServer(params, noRefetch,name = "image") {
	        var that = this;
	        var url = this.serviceRequestUrl + params.url;
	        if (!params.type) {
	            params.type = "GET";
	        }
	        if (params.queryString) {
	            params.queryString = params.queryString;
	        } else {
	            params.queryString = "";
	        }
	        uni.uploadFile({
	            url: url + params.queryString,
	            filePath: params.filePath,
                name: name,
	            header: {
	                "Authorization": uni.getStorageSync("tokenHead") + uni.getStorageSync("token"),
	                "content-type": "application/json"
	            },
	            success: function(res) {
	                if (res.data.code == "401") {
	                    //token过期
	                    if (!noRefetch) {
	                        that._refetch(params);
	                    }
	                }
	                //根据http状态码判断本次http请求调用是否成功
	                var code = res.statusCode.toString();
	                var startChar = code.charAt(0);
	
	                if (startChar == "2") {   //http调用是成功的
	                    params.sCallBack && params.sCallBack(res);
	                } else {
	                    //处理请求错误 原因：token可能是失效的
	
	                    //但是这种情况只能发生一次
	                    if (code == "500") { //因为token失效服务器返回的状态码
	                        //1.获取新的令牌 2.获取完成以后继续调用本接口 3.只能请求一次 不能反复校验
	                        if (!noRefetch) {
	                            that._refetch(params);
	                        }
	                    }
	                    params.sCallBack && params.sCallBack(res);
	                }
	            },
	            fail: function(err) {
	                //网络中断或者网络异常导致的错误
	                console.log(err);
	                console.log("服务器走神了...");
	            }
	        });
	    }
	
    // 文件上传
    uploadFile(params, noRefetch) {
        var that = this;
        var url = this.baseRequestUrl + params.url;
        if (!params.type) {
            params.type = "GET";
        }
        if (params.queryString) {
            params.queryString = params.queryString;
        } else {
            params.queryString = "";
        }
        uni.uploadFile({
            url: url + params.queryString,
            filePath: params.filePath,
            name: "photo",
            header: {
                "Authorization": uni.getStorageSync("tokenHead") + uni.getStorageSync("token"),
                "content-type": "application/json"
            },
            success: function(res) {
                if (res.data.code == "401") {
                    //token过期
                    if (!noRefetch) {
                        that._refetch(params);
                    }
                }
                //根据http状态码判断本次http请求调用是否成功
                var code = res.statusCode.toString();
                var startChar = code.charAt(0);

                if (startChar == "2") {   //http调用是成功的
                    params.sCallBack && params.sCallBack(res);
                } else {
                    //处理请求错误 原因：token可能是失效的

                    //但是这种情况只能发生一次
                    if (code == "500") { //因为token失效服务器返回的状态码
                        //1.获取新的令牌 2.获取完成以后继续调用本接口 3.只能请求一次 不能反复校验
                        if (!noRefetch) {
                            that._refetch(params);
                        }
                    }
                    params.sCallBack && params.sCallBack(res);
                }
            },
            fail: function(err) {
                //网络中断或者网络异常导致的错误
                console.log(err);
                console.log("服务器走神了...");
               // reject(err);
            }
        });
    }

    // 服务端请求
    serviceRequest(params, noRefetch) {
        var that = this;
        var url = params.url.includes("http") ? params.url : (this.serviceRequestUrl + params.url);
        if (!params.type) {
            params.type = "GET";
        }
        if (params.queryString) {
            params.queryString = params.queryString;
        } else {
            params.queryString = "";
        }

        uni.request({
            url: url + params.queryString,
            data: params.data,
            method: params.type,
            header: {
                "Authorization": uni.getStorageSync("tokenHead") + uni.getStorageSync("token"),
                "content-type": "application/json",
                ...params.header
            },
            success: function(res) {
                if (res.data.code == "401") {
                    console.log("登录过期");
                    // 过期跳转登录页
                    wx.redirectTo({
                        url: "/pages/login/index"
                    });
                    //token过期
                    if (!noRefetch) {
                        that._refetch(params);
                    }
                }
                //根据http状态码判断本次http请求调用是否成功
                var code = res.statusCode.toString();
                var startChar = code.charAt(0);

                if (startChar == "2") {   //http调用是成功的
                    params.sCallBack && params.sCallBack(res);
                } else {

                    if (code == "500") { //因为token失效服务器返回的状态码
                        //1.获取新的令牌 2.获取完成以后继续调用本接口 3.只能请求一次 不能反复校验
                        if (!noRefetch) {
                            that._refetch(params);
                        }
                    }
                    params.sCallBack && params.sCallBack(res);
                }
            },
            fail: function(err) {
                //网络中断或者网络异常导致的错误
                console.log(err);
                console.log("服务器走神了...");
            }
        });
    }

    //用户端请求
    //当noRefetch为true时,不做未授权重制机制
    request(params, noRefetch) {
        var that = this;
        var url = params.url.includes("http") ? params.url : (this.baseRequestUrl + params.url);
        if (!params.type) {
            params.type = "GET";
        }
        if (params.queryString) {
            params.queryString = params.queryString;
        } else {
            params.queryString = "";
        }

        uni.request({
            url: url + params.queryString,
            data: params.data,
            method: params.type,
            header: {
                "Authorization": uni.getStorageSync("tokenHead") + uni.getStorageSync("token"),
                "content-type": "application/json",
                ...params.header
            },
            success: function(res) {
                if (res.data.code == "401") {
                    // 过期跳转登录页
                    wx.redirectTo({
                        url: "pages/login/index"
                    });
                    //token过期
                    if (!noRefetch) {
                        that._refetch(params);
                    }
                }
                //根据http状态码判断本次http请求调用是否成功
                var code = res.statusCode.toString();
                var startChar = code.charAt(0);

                if (startChar == "2") {   //http调用是成功的
                    params.sCallBack && params.sCallBack(res);
                } else {

                    if (code == "500") { //因为token失效服务器返回的状态码
                        //1.获取新的令牌 2.获取完成以后继续调用本接口 3.只能请求一次 不能反复校验
                        if (!noRefetch) {
                            that._refetch(params);
                        }
                    }
                    params.sCallBack && params.sCallBack(res);
                }
            },
            fail: function(err) {
                //网络中断或者网络异常导致的错误
                console.log(err);
                console.log("服务器走神了...");
            }
        });
    }

    jgRequest(params, noRefetch) {
        var that = this;
        var url = params.url.includes("http") ? params.url : (this.jgRequestUrl + params.url);
        if (!params.type) {
            params.type = "GET";
        }
        if (params.queryString) {
            params.queryString = params.queryString;
        } else {
            params.queryString = "";
        }

        uni.request({
            url: url + params.queryString,
            data: params.data,
            method: params.type,
            header: {
                "Authorization": uni.getStorageSync("tokenHead") + uni.getStorageSync("token"),
                "content-type": "application/json",
                ...params.header
            },
            success: function(res) {
                if (res.data.code == "401") {
                    //token过期
                    if (!noRefetch) {
                        that._refetch(params);
                    }
                }
                //根据http状态码判断本次http请求调用是否成功
                var code = res.statusCode.toString();
                var startChar = code.charAt(0);

                if (startChar == "2") {   //http调用是成功的
                    params.sCallBack && params.sCallBack(res.data);
                } else {

                    if (code == "500") { //因为token失效服务器返回的状态码
                        //1.获取新的令牌 2.获取完成以后继续调用本接口 3.只能请求一次 不能反复校验
                        if (!noRefetch) {
                            that._refetch(params);
                        }
                    }
                    params.sCallBack && params.sCallBack(res.data);
                }
            },
            fail: function(err) {
                //网络中断或者网络异常导致的错误
                console.log(err);
                console.log("服务器走神了...");
            }
        });
    }

//token失效的时候，重新刷一下token
    _refetch(params) {
        var token = new Token();
        token.getTokenFromServer((token) => {
            this.request(params, true);
        });
    }
}

export { Base };