import request from './request'

/**
 * 可用于各模块定义各自api请求
 */
class Api {
    /**
     * 请求url
     */
    url: string;

    /**
     * 请求方法
     */
    method: string;

    constructor(url: string, method: string) {
        this.url = url;
        this.method = method;
    }

    /**
     * 设置rl
     * @param {String} uri 请求url
     */
    setUrl(url: string) {
        this.url = url;
        return this;
    }

    /**
     * url的请求方法
     * @param {String} method 请求方法
     */
    setMethod(method: string) {
        this.method = method;
        return this;
    }

    /**
     * 获取权限的完整url
     */
    getUrl() {
        return request.getApiUrl(this.url);
    }

    /**
     * 操作该权限，即请求对应的url
     * @param {Object} param 请求该权限的参数
     */
    request(param: any): Promise<any> {
        return request.send(this, param);
    }

    /**
    * 操作该权限，即请求对应的url
    * @param {Object} param 请求该权限的参数
    */
    requestWithHeaders(param: any, headers: any): Promise<any> {
        return request.sendWithHeaders(this, param, headers);
    }


    /**    静态方法     **/

    /**
     * 静态工厂，返回Api对象，并设置url与method属性
     * @param url url
     * @param method 请求方法(get,post,put,delete...)
     */
    static create(url: string, method: string) {
        return new Api(url, method);
    }
}


export default Api
