import type { Type } from 'ts-gems';
import { OpraSchema } from '../../schema/index.js';
import { DocumentInitContext } from '../common/document-init-context.js';
import { HttpApi } from '../http/http-api.js';
import { HttpController } from '../http/http-controller.js';
import { HttpMediaType } from '../http/http-media-type.js';
import { HttpOperation } from '../http/http-operation.js';
import { HttpOperationResponse } from '../http/http-operation-response.js';
import { HttpRequestBody } from '../http/http-request-body.js';
export declare namespace HttpApiFactory {
    interface InitArguments extends HttpApi.InitArguments {
        controllers: Type[] | any[] | ((parent: any) => any) | OpraSchema.HttpApi['controllers'];
    }
}
/**
 * @class HttpApiFactory
 */
export declare class HttpApiFactory {
    /**
     * Generates HttpApi
     * @param context
     * @param init
     */
    static createApi(context: DocumentInitContext, init: HttpApiFactory.InitArguments): Promise<HttpApi>;
    protected static _createControllers(context: DocumentInitContext, parent: HttpApi | HttpController, controllers: Type[] | any[] | ((parent: any) => any) | OpraSchema.HttpApi['controllers']): Promise<void>;
    protected static _resolveControllerMetadata(context: DocumentInitContext, parent: HttpApi | HttpController, thunk: Type | object | Function | OpraSchema.HttpController): Promise<{
        metadata: HttpController.Metadata | OpraSchema.HttpController;
        instance: any;
        ctor: Type;
    } | undefined | void>;
    protected static _createController(context: DocumentInitContext, parent: HttpApi | HttpController, metadata: HttpController.Metadata | OpraSchema.HttpController, instance: any, ctor: Type): Promise<HttpController | undefined | void>;
    /**
     * Initializes HttpOperation
     * @param context
     * @param operation
     * @param metadata
     * @protected
     */
    protected static _initHttpOperation(context: DocumentInitContext, operation: HttpOperation, metadata: HttpOperation.Metadata | OpraSchema.HttpOperation): Promise<HttpOperation>;
    /**
     * Initializes HttpMediaType
     * @param context
     * @param target
     * @param metadata
     * @protected
     */
    protected static _initHttpMediaType(context: DocumentInitContext, target: HttpMediaType, metadata: HttpMediaType.Metadata | OpraSchema.HttpMediaType): Promise<void>;
    /**
     * Initializes HttpOperationResponse
     * @param context
     * @param target
     * @param metadata
     * @protected
     */
    protected static _initHttpOperationResponse(context: DocumentInitContext, target: HttpOperationResponse, metadata: HttpOperationResponse.Metadata | OpraSchema.HttpOperationResponse): Promise<void>;
    /**
     * Initializes HttpRequestBody
     * @param context
     * @param target
     * @param metadata
     * @protected
     */
    protected static _initHttpRequestBody(context: DocumentInitContext, target: HttpRequestBody, metadata: HttpRequestBody.Metadata | OpraSchema.HttpRequestBody): Promise<void>;
}
