const isArray = require('isarray');
/**
 * 请求类父类
 */
module.exports = class BaseRequest {
    constructor() {
        this.bizModel = {};

        this.files = undefined;

        // 用于文件上传时强制转换成POST_FILE请求
        this.__forceRequestType__ = undefined;

        this.checkOverride();
    }

    /**
     * 校验子类是否已重写相关方法
     * */
    checkOverride() {
        try {
            this.getMethod();
            this.getVersion();
            this.getRequestType();
        } catch (error) {
            throw error;
        }
    }

    setBizModel(biz = {}) {
        this.bizModel = biz;
        return this;
    }

    setFiles(files) {
        this.files = files;
        return this;
    }

    addFile(name, path) {
        if (name && path) {
            if (!isArray(this.files)) {
                this.files = [];
            }
            this.files.push({name, path});
        }
        return this;
    }

    /**
     * 返回接口名称
     */
    getMethod() {
        throw `未实现BaseRequest类getMethod()方法`;
    }

    /**
     * 返回版本号
     */
    getVersion() {
        throw '未实现BaseRequest类getVersion()方法';
    }

    /**
     * 返回请求类型，使用RequestType.js
     */
    getRequestType() {
        throw '未实现BaseRequest类getRequestType()方法';
    }

    setForceRequestType(type) {
        this.__forceRequestType__ = type;
        return this;
    }

    getRealRequestType() {
        return this.__forceRequestType__ || this.getRequestType();
    }

    /**
     * 解析返回结果，子类可以覆盖实现
     * @param responseData 服务器返回内容
     * @returns 返回结果
     */
    parseResponse(responseData) {
        return responseData;
    }
};
