import { IApi, IApiPayload } from "@etsoo/restclient";
import { IActionResult, IdType } from "@etsoo/shared";
import { IApp } from "../app/IApp";
import { BaseApi } from "./BaseApi";
import { ResultPayload } from "./dto/ResultPayload";
import { MergeRQ } from "./rq/MergeRQ";
import { QueryRQ } from "./rq/QueryRQ";
import { UpdateStatusRQ } from "./rq/UpdateStatusRQ";
/**
 * Entity API
 * Follow com.etsoo.CoreFramework.Services.EntityServiceBase
 */
export declare class EntityApi<T extends IApp = IApp> extends BaseApi<T> {
    protected flag: string;
    /**
     * Constructor
     * @param flag Identity flag, like 'Product' for product APIs
     * @param app Application
     */
    constructor(flag: string, app: T, api?: IApi);
    /**
     * Create
     * @param data Modal data
     * @param payload Payload
     * @returns Result
     */
    protected createBase<R extends IActionResult>(data: object, payload?: IApiPayload<R>): Promise<R | undefined>;
    /**
     * Delete
     * @param id Id or ids
     * @param payload Payload
     */
    protected deleteBase<R extends IActionResult>(id: IdType, payload?: IApiPayload<R>): Promise<R | undefined>;
    protected deleteBase<R extends IActionResult>(ids: IdType[], payload?: IApiPayload<R>): Promise<R | undefined>;
    /**
     * List
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    protected listBase<T extends IdType, RQ extends QueryRQ<T>, R extends object>(rq: RQ, payload?: IApiPayload<R[]>): Promise<R[] | undefined>;
    /**
     * Merge
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    protected mergeBase<T extends IdType = number>(rq: MergeRQ<T>, payload?: ResultPayload): Promise<IActionResult<{}> | undefined>;
    /**
     * Query
     * @param rq Request data
     * @param payload Payload
     * @param queryKey Additional query key
     * @returns Result
     */
    protected queryBase<T extends IdType, RQ extends QueryRQ<T>, R extends object>(rq: RQ, payload?: IApiPayload<R[]>, queryKey?: string): Promise<R[] | undefined>;
    /**
     * Query favored country ids
     * @returns Result
     */
    protected queryFavoredCountryIdsBase(api?: string): Promise<string[]>;
    /**
     * Read
     * @param id Id
     * @param payload Payload
     * @returns Result
     */
    protected readBase<R extends object>(id: IdType, payload?: IApiPayload<R>): Promise<R | undefined>;
    /**
     * Sort
     * @param items Items to sort
     * @param payload Payload
     * @returns Result
     */
    protected sortBase<RQ extends {
        id: IdType;
    }>(items: RQ[], payload?: IApiPayload<number>): Promise<number | undefined>;
    /**
     * Sort with category
     * @param category Category for grouping
     * @param items Items to sort
     * @param method Sort method
     * @param payload Payload
     * @returns Result
     */
    protected sortWith<RQ extends {
        id: IdType;
    }>(category: number, items: RQ[], method?: string, payload?: IApiPayload<number>): Promise<number | undefined>;
    /**
     * Update
     * @param data Modal data
     * @param payload Payload
     * @returns Result
     */
    protected updateBase<R extends IActionResult>(data: object, payload?: IApiPayload<R>): Promise<R | undefined>;
    /**
     * Read for update
     * @param id Id
     * @param payload Payload
     * @returns Result
     */
    protected updateReadBase<R extends object>(id: IdType, payload?: IApiPayload<R>): Promise<R | undefined>;
    /**
     * Update status
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    protected updateStatusBase(rq: UpdateStatusRQ, payload?: ResultPayload): Promise<IActionResult<{}> | undefined>;
}
