import { CodeModel, Operation, BooleanSchema, Schema, NumberSchema, ArraySchema, Parameter, ChoiceSchema, StringSchema, ObjectSchema, ByteArraySchema, CharSchema, DateSchema, DateTimeSchema, DurationSchema, UuidSchema, UriSchema, CredentialSchema, ODataQuerySchema, UnixTimeSchema, OrSchema, XorSchema, DictionarySchema, HttpWithBodyRequest, SealedChoiceSchema, BinarySchema, AnySchema, ConstantSchema, Request, OperationGroup, TimeSchema, ArmIdSchema } from "@autorest/codemodel";
import { Session } from "@autorest/extension-base";
import { KnownMediaType } from "@azure-tools/codegen";
import { Dereferenced, Refable, MediaType, OpenAPI3Document } from "@azure-tools/openapi";
import * as OpenAPI from "@azure-tools/openapi";
import { KnownMediaTypeGroupItem, RequestBodyGroup } from "./body-processor";
import { Interpretations } from "./interpretations";
export declare class ModelerFour {
    protected session: Session<OpenAPI3Document>;
    codeModel: CodeModel;
    private input;
    private inputOperations;
    protected interpret: Interpretations;
    private apiVersionMode;
    private apiVersionParameter;
    private useModelNamespace;
    private profileFilter;
    private schemaCache;
    private options;
    private uniqueNames;
    private bodyProcessor;
    private securityProcessor;
    private ignoreHeaders;
    private specialHeaders;
    constructor(session: Session<OpenAPI3Document>);
    preprocessOperations(): void;
    initApiVersionMode(apiVersionParameter: "choice" | "constant" | undefined, useModelNamespace: boolean | undefined): "client" | "method" | "profile" | "none";
    init(): Promise<this>;
    private resolve;
    private use;
    resolveArray<T extends {}>(source: Array<Refable<T>> | undefined): T[];
    resolveDictionary<T extends {}>(source?: Record<string, Refable<T>>): {
        key: string;
        value: T;
    }[];
    location(obj: any): string;
    processBooleanSchema(name: string, schema: OpenAPI.Schema): BooleanSchema;
    processIntegerSchema(name: string, schema: OpenAPI.Schema): NumberSchema;
    processNumberSchema(name: string, schema: OpenAPI.Schema): NumberSchema;
    processStringSchema(name: string, schema: OpenAPI.Schema): StringSchema;
    processCredentialSchema(name: string, schema: OpenAPI.Schema): CredentialSchema;
    processUriSchema(name: string, schema: OpenAPI.Schema): UriSchema;
    processArmId(name: string, schema: OpenAPI.Schema): ArmIdSchema;
    processUuidSchema(name: string, schema: OpenAPI.Schema): UuidSchema;
    processDurationSchema(name: string, schema: OpenAPI.Schema): DurationSchema;
    processDateTimeSchema(name: string, schema: OpenAPI.Schema): DateTimeSchema;
    processTimeSchema(name: string, schema: OpenAPI.Schema): TimeSchema;
    processDateSchema(name: string, schema: OpenAPI.Schema): DateSchema;
    processCharacterSchema(name: string, schema: OpenAPI.Schema): CharSchema;
    processByteArraySchema(name: string, schema: OpenAPI.Schema): ByteArraySchema;
    processArraySchema(name: string, schema: OpenAPI.Schema): ArraySchema;
    _stringSchema?: StringSchema;
    get stringSchema(): StringSchema;
    _charSchema?: CharSchema;
    get charSchema(): CharSchema;
    _booleanSchema?: BooleanSchema;
    get booleanSchema(): BooleanSchema;
    private _anySchema?;
    get anySchema(): AnySchema;
    private _anyObjectSchema?;
    get anyObjectSchema(): AnySchema;
    getSchemaForString(schema: OpenAPI.Schema): Schema;
    getPrimitiveSchemaForEnum(schema: OpenAPI.Schema): Schema;
    /**
     *
     * @param name Name of the schema
     * @param schema OpenApi3 schema.
     * @returns List of choicevalue from parents enum(refed using allOf) if any.
     */
    private getChoiceSchemaParentValues;
    processChoiceSchema(name: string, schema: OpenAPI.Schema): ChoiceSchema | SealedChoiceSchema | ConstantSchema;
    processOrSchema(name: string, schema: OpenAPI.Schema): OrSchema;
    processXorSchema(name: string, schema: OpenAPI.Schema): XorSchema;
    processDictionarySchema(name: string, schema: OpenAPI.Schema): DictionarySchema;
    findPolymorphicDiscriminator(schema: OpenAPI.Schema | undefined, skipFirst?: boolean): OpenAPI.Discriminator | undefined;
    createObjectSchema(name: string, schema: OpenAPI.Schema): ObjectSchema;
    processObjectSchema(name: string, schema: OpenAPI.Schema): ObjectSchema | DictionarySchema | OrSchema | XorSchema | AnySchema;
    private findDiscriminatorValue;
    private findDiscriminatorValueFromMapping;
    processOdataSchema(name: string, schema: OpenAPI.Schema): ODataQuerySchema;
    processUnixTimeSchema(name: string, schema: OpenAPI.Schema): UnixTimeSchema;
    processBinarySchema(name: string, schema: OpenAPI.Schema): BinarySchema;
    processSchema(name: string, schema: OpenAPI.Schema): Schema;
    private trap;
    private processSchemaImpl;
    filterMediaTypes(oai3Content: Record<string, MediaType> | undefined): Map<KnownMediaType, KnownMediaTypeGroupItem[]>;
    getUniqueName(baseName: string): string;
    getContentTypeParameterSchema(http: HttpWithBodyRequest, alwaysConstant?: boolean): ChoiceSchema<StringSchema> | SealedChoiceSchema<StringSchema> | ConstantSchema<StringSchema>;
    getAcceptParameterSchema(mediaTypes: Array<string>): ConstantSchema<Schema>;
    processBinary(requestBodyGroup: RequestBodyGroup, operation: Operation, body: Dereferenced<OpenAPI.RequestBody | undefined>): Request;
    processSerializedObject(requestBodyGroup: RequestBodyGroup, operation: Operation, body: Dereferenced<OpenAPI.RequestBody | undefined>): Request;
    processOperation(httpOperation: OpenAPI.HttpOperation, method: OpenAPI.HttpMethod, path: string, pathItem: OpenAPI.PathItem): void;
    processHostParameters(httpOperation: OpenAPI.HttpOperation, operation: Operation, path: string, pathItem: OpenAPI.PathItem): string;
    private getParameterLocation;
    private getServerVariableSchema;
    processApiVersionParameterForProfile(): void;
    addApiVersionParameter(parameter: OpenAPI.Parameter | OpenAPI.ServerVariable, operation: Operation, apiVersionParameterSchema: ChoiceSchema | ConstantSchema): Parameter;
    processChoiceApiVersionParameter(parameter: OpenAPI.Parameter | OpenAPI.ServerVariable, operation: Operation, pathItem: OpenAPI.PathItem | undefined, apiversions: Array<string>): Parameter;
    processConstantApiVersionParameter(parameter: OpenAPI.Parameter | OpenAPI.ServerVariable, operation: Operation, pathItem: OpenAPI.PathItem | undefined, apiversions: string[]): Parameter;
    processApiVersionParameter(parameter: OpenAPI.Parameter | OpenAPI.ServerVariable, operation: Operation, pathItem?: OpenAPI.PathItem): void | Parameter;
    processParameters(httpOperation: OpenAPI.HttpOperation, operation: Operation, pathItem: OpenAPI.PathItem): void;
    /**
     * Resolve if the parameter is a header that should be ignored.
     * @param parmeter Operation parameter.
     * @returns boolean if parameter should be ignored.
     */
    private isParameterSpecialHeader;
    /**
     * Resolve if the parameter is a header that should be ignored.
     * @param parmeter Operation parameter.
     * @returns boolean if parameter should be ignored.
     */
    private isParameterIgnoredHeader;
    processResponses(httpOperation: OpenAPI.HttpOperation, operation: Operation): void;
    private processResponseHeaders;
    processRequestBody(httpOperation: OpenAPI.HttpOperation, httpMethod: OpenAPI.HttpMethod, operationGroup: OperationGroup, operation: Operation, path: string, baseUri: string): void;
    /**
     * LEGACY Body processing as changed in https://github.com/Azure/autorest/pull/4405
     */
    processRequestBodyLegacy(httpOperation: OpenAPI.HttpOperation, httpMethod: string, operationGroup: OperationGroup, operation: Operation, path: string, baseUri: string): void;
    process(): CodeModel;
    private propagateSchemaUsage;
    private trackSchemaUsage;
}
//# sourceMappingURL=modelerfour.d.ts.map