import { components as ModelsComponents } from 'topvisor-openapi/src/ts/Models';
import type * as SchemaImported from 'topvisor-openapi/src/ts/Topvisor';
declare global {
    namespace Api {
        /**
         * Схема API OpenAPI TV
         *
         * Также содержит утилиты, которые работают с определяемой схемой и расширением селектора
         *
         * Для определения другого API с расширением селектора необходимо определить такой же namespace с нужными `SchemaImported` и `ModelsComponents`
         */
        namespace TV {
            namespace Schema {
                type paths = SchemaImported.paths;
                type operations = SchemaImported.operations;
                type components = SchemaImported.components;
                type webhooks = SchemaImported.webhooks;
                type $defs = SchemaImported.$defs;
            }
            type Paths = Api.TV.Schema.paths;
            type Path<Path extends Api.Path<Paths> = Api.Path<Paths>> = Path;
            /**
             * Все схемы моделей данных API
             */
            type Models = ModelsComponents['schemas'];
            /**
             * Модель данных конкретного метода API
             */
            type Model<Path extends Api.Path<Paths>> = Api.Model<Paths, Path>;
            /**
             * Параметр списка полей `fields` конкретного метода API
             */
            type Fields<Path extends Api.Path<Paths>> = Api.ParamsFields<Api.ClientRequestContext<Paths, Path, true>>;
            /**
             * Объект запроса к конкретному методу API
             *
             * Дженерик Fields в чистом TypeScript не будет работать, так как используется tuple, работает при указании значения в самом js
             *
             * @see https://github.com/microsoft/TypeScript/pull/62170
             *
             * @remarks Не использовать, тип запроса API должен определяться `client.gen()`, указывать ему тип вручную не рекомендуется
             */
            type Request<Path extends Api.Path<Paths>, Fields extends Api.ParamsFields<RequestContext> | undefined = undefined, RequestContext extends Api.ClientRequestContext<Paths, Path, true> = Api.ClientRequestContext<Paths, Path, true>> = Api.ClientRequest<RequestContext, Fields>;
            /**
             * Параметры запроса к конкретному методу API
             */
            type Params<Path extends Api.Path<Paths>, Fields extends Api.ParamsFields<RequestContext> | undefined = undefined, RequestContext extends Api.ClientRequestContext<Paths, Path, true> = Api.ClientRequestContext<Paths, Path, true>> = Api.Params<RequestContext, Fields>;
            /**
             * Результат конкретного метода API
             */
            type ResponseSuccess<Path extends Api.Path<Paths>, Fields extends Api.ParamsFields<RequestContext> | undefined = undefined, FetchStyle extends RequestContext['ParamsFetchStyle'] | null = null, RequestContext extends Api.ClientRequestContext<Paths, Path, true> = Api.ClientRequestContext<Paths, Path, true>, Result extends Api.Result<RequestContext, Fields, FetchStyle> = Api.Result<RequestContext, Fields, FetchStyle>> = Api.ResponseSuccess<Result, RequestContext['Oper']>;
            /**
             * Результат `res.result` конкретного метода API
             */
            type Result<Path extends Api.Path<Paths>, Fields extends Api.ParamsFields<RequestContext> | undefined = undefined, FetchStyle extends RequestContext['ParamsFetchStyle'] | null = null, RequestContext extends Api.ClientRequestContext<Paths, Path, true> = Api.ClientRequestContext<Paths, Path, true>> = Api.Result<RequestContext, Fields, FetchStyle>;
        }
    }
}
export {};
