import { GenerateRule, Request, IRequest } from "../request";
import { RequestInfo } from "../interchange";
import { Header } from "../utils/headers";
/**
 * Type of response format for WHM API 1. The data can be requested to be sent back
 * either in JSON format or XML format.
 */
export declare enum WhmApiType {
    /**
     * Json-Api request
     */
    JsonApi = "json-api",
    /**
     * Xml-Api request
     */
    XmlApi = "xml-api"
}
export declare class WhmApiRequest extends Request {
    /**
     * The API output format the request should be generated for.
     */
    apiType: WhmApiType;
    /**
     * Add a custom HTTP header to the request
     *
     * @param name Name of a column
     * @return Updated Request object.
     */
    addHeader(header: Header): Request;
    /**
     * Build a fragment of the parameter list based on the list of name/value pairs.
     *
     * @param params  Parameters to serialize.
     * @param encoder Encoder to use to serialize the each parameter.
     * @return Fragment with the serialized parameters
     */
    private _build;
    /**
     * Convert from a number into a string that WHM API 1 will sort
     * in the same order as the numbers; e.g.: 26=>"za", 52=>"zza", ...
     * @method  _make_whm_api_fieldspec_from_number
     * @private
     * @param num Index of sort item
     * @return letter combination for the index of the sort item.
     */
    private _make_whm_api_fieldspec_from_number;
    /**
     * Generates the arguments for the request.
     *
     * @param params List of parameters to adjust based on the sort rules in the Request.
     */
    private _generateArguments;
    /**
     * Generates the sort parameters for the request.
     *
     * @param params List of parameters to adjust based on the sort rules in the Request.
     */
    private _generateSorts;
    /**
     * Look up the correct name for the filter operator
     *
     * @param operator Type of filter operator to use to filter the items
     * @returns The string counter part for the filter operator.
     * @throws Will throw an error if an unrecognized FilterOperator is provided.
     */
    private _lookupFilterOperator;
    /**
     * Generate the filter parameters, if any.
     *
     * @param params List of parameters to adjust based on the filter rules provided.
     */
    private _generateFilters;
    /**
     * In UAPI, we request the starting record, not the starting page. This translates
     * the page and page size into the correct starting record.
     *
     * @param pager Object containing pager settings.
     */
    private _translatePageToStart;
    /**
     * Generate the pager request parameters, if any.
     *
     * @param params List of parameters to adjust based on the pagination rules.
     */
    private _generatePagination;
    /**
     * Create a new UAPI request.
     *
     * @param init Optional request object used to initialize this object.
     */
    constructor(apiType: WhmApiType, init?: IRequest);
    /**
     * Generate the interchange object that has the pre-encoded
     * request using UAPI formatting.
     *
     * @param rule Optional parameter to specify a specific Rule we want the Request to be generated for.
     * @return {RequestInfo} Request information ready to be used by a remoting layer
     */
    generate(rule?: GenerateRule): RequestInfo;
}
