import { Options } from 'prettier';
import { Agent } from 'https';
import { OpenAPIV3 } from 'openapi-types';
import { Ora } from 'ora';

type Spec = OpenAPIV3.Document;
interface IGetFromSwaggerRootHtml {
    /**
     * Get Root url of swagger and get list of scopes jsons.
     *
     * @param baseUrl - YOUR_BASE_URL
     */
    baseUrl: string;
    sslConfiguredAgent?: Agent;
}
interface IGetSwaggerDefenitions {
    requests: string[];
    sslConfiguredAgent?: Agent;
}
interface ISwaggerRootHtml {
    urls: URL[];
    deepLinking: boolean;
    persistAuthorization: boolean;
    displayOperationId: boolean;
    defaultModelsExpandDepth: number;
    defaultModelExpandDepth: number;
    defaultModelRendering: string;
    displayRequestDuration: boolean;
    docExpansion: string;
    showExtensions: boolean;
    showCommonExtensions: boolean;
    supportedSubmitMethods: string[];
}
interface URL {
    url: string;
    name: string;
}
type fileTypes = 'mts' | 'ts' | 'd.ts' | 'md' | 'tsx';
declare enum fileTypesEnum {
    enums = "enums",
    types = "types",
    client = "client",
    api = "api",
    hook = "hook"
}
interface IConfig {
    baseUrl: string;
    outDir: string;
    archive?: boolean;
    prettier?: Options;
    resourcePick?: string;
    filter?: RegExp;
    singleJson?: boolean;
    hook?: 'SWR' | 'ReactQuery' | 'NG';
    fileTypes?: {
        [key in fileTypesEnum]: fileTypes;
    };
}
interface ISaveFile {
    fileName: string;
    location: string;
    data: unknown;
    extention?: string;
    beautify?: boolean;
    comment?: string;
}
interface ISaveBatch {
    files: {
        name: string;
        data: string;
        extention?: string;
        comment?: string;
    }[];
    location: string;
    beautify?: boolean;
    extention?: string;
}
type IOpenApiComponent = OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject;
type ComponentSchema = {
    objectName: string;
    objectSchema: IOpenApiComponent;
}[] | undefined;
interface ICreateComponentSchemas {
}
declare function isReference(schemaObject: IOpenApiComponent): schemaObject is OpenAPIV3.ReferenceObject;
declare function isArraySchemaObject(schemaObject: OpenAPIV3.ArraySchemaObject | OpenAPIV3.NonArraySchemaObject): schemaObject is OpenAPIV3.ArraySchemaObject;
interface Spins {
    id?: string;
    spinner: Ora;
}
interface IRecursiveArraySchema {
    component: OpenAPIV3.SchemaObject;
    name: string;
}
interface IRecursiveComponentSchema {
    component?: IOpenApiComponent;
    name: string;
}
declare function isReferenceOrParameter(object: OpenAPIV3.ParameterObject | OpenAPIV3.ReferenceObject): object is OpenAPIV3.ReferenceObject;
interface ICreateParameter {
    parameters?: (OpenAPIV3.ReferenceObject | OpenAPIV3.ParameterObject)[];
    pathName: string;
    methodType: string;
}
declare function isReferenceOrRequestBody(object: OpenAPIV3.RequestBodyObject | OpenAPIV3.ReferenceObject): object is OpenAPIV3.ReferenceObject;
declare function isReferenceOrResponse(object: OpenAPIV3.ResponseObject | OpenAPIV3.ReferenceObject): object is OpenAPIV3.ReferenceObject;
interface ICreateRequestBody {
    requestBody?: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject;
    pathName: string;
    methodType: string;
}
interface ICreateResponse {
    response: OpenAPIV3.ReferenceObject | OpenAPIV3.ResponseObject;
    pathName: string;
    methodType: string;
    status: 'Ok' | 'Bad';
}
type ISchema = {
    [key: string]: IOpenApiComponent;
};
type HttpMethodsUpperCase = 'Get' | 'Put' | 'Post' | 'Delete' | 'Options' | 'Head' | 'Patch';
declare function isInterfaceEmpty(object: {} | {
    [key: string]: any;
}): object is {};

export { type ComponentSchema, type HttpMethodsUpperCase, type IConfig, type ICreateComponentSchemas, type ICreateParameter, type ICreateRequestBody, type ICreateResponse, type IGetFromSwaggerRootHtml, type IGetSwaggerDefenitions, type IOpenApiComponent, type IRecursiveArraySchema, type IRecursiveComponentSchema, type ISaveBatch, type ISaveFile, type ISchema, type ISwaggerRootHtml, type Spec, type Spins, type URL, type fileTypes, fileTypesEnum, isArraySchemaObject, isInterfaceEmpty, isReference, isReferenceOrParameter, isReferenceOrRequestBody, isReferenceOrResponse };
