import { MethodType, MethodTypeWithBody } from '../const/methods.js';
import { OptionsType, ValidStatusType } from './options.js';
import { RouteQuery, RouteRequestBody, RoutesForMethod, SchemaType } from './schemeTypes.js';
import { NotNever } from './utils.js';
/**
 * @description Type definition for fetcher functions without a request body.
 * This type handles methods that do not require a request body (e.g., GET, DELETE).
 *
 * @template Schema - The OpenAPI schema type.
 * @template Method - The HTTP method type (excluding methods with a body).
 * @template Route - The route type within the schema.
 */
export type FetcherWithoutBodyParameters<Schema extends SchemaType, Method extends Exclude<MethodType, MethodTypeWithBody>, Route extends RoutesForMethod<Schema, Method>, MethodValidStatus extends ValidStatusType | undefined = undefined, StrictOptions extends boolean = NotNever<RouteQuery<Schema, Method, Route>>> = Parameters<(...args: StrictOptions extends true ? Parameters<(path: Route, options: OptionsType<Schema, Method, Route, MethodValidStatus>) => never> : Parameters<(path: Route, options?: OptionsType<Schema, Method, Route, MethodValidStatus>) => never>) => never>;
/**
 * @description Type definition for fetcher functions with a request body.
 * This type handles methods that require a request body (e.g., POST, PUT).
 *
 * @template Schema - The OpenAPI schema type.
 * @template Method - The HTTP method type (requiring a body).
 * @template Route - The route type within the schema.
 */
export type FetcherWithBodyParameters<Schema extends SchemaType, Method extends MethodTypeWithBody, Route extends RoutesForMethod<Schema, Method>, MethodValidStatus extends ValidStatusType | undefined = undefined, Body extends NotNever<RouteRequestBody<Schema, Method, Route>> extends true ? RouteRequestBody<Schema, Method, Route> : undefined = NotNever<RouteRequestBody<Schema, Method, Route>> extends true ? RouteRequestBody<Schema, Method, Route> : undefined, StrictBody extends boolean = NotNever<RouteRequestBody<Schema, Method, Route>>, StrictOptions extends boolean = NotNever<RouteQuery<Schema, Method, Route>>, HasBody extends boolean = StrictOptions extends true ? true : StrictBody> = Parameters<(...args: StrictOptions extends true ? Parameters<(path: Route, body: Body, options: OptionsType<Schema, Method, Route, MethodValidStatus>) => never> : HasBody extends true ? Parameters<(path: Route, body: Body, options?: OptionsType<Schema, Method, Route, MethodValidStatus>) => never> : Parameters<(path: Route, body?: Body, options?: OptionsType<Schema, Method, Route, MethodValidStatus>) => never>) => never>;
