import type { z } from 'zod/v4';
import type { CommonRouteDefinitionMetadata, RoutePathResolver } from '../apiContracts.ts';
import type { HttpStatusCode } from '../HttpStatusCodes.ts';
import type { DualModeContractDefinition } from './dualModeContracts.ts';
import type { SSEContractDefinition } from './sseContracts.ts';
import type { SSEEventSchemas } from './sseTypes.ts';
/**
 * Configuration for building a GET SSE route.
 * Forbids requestBodySchema for GET variants.
 */
export type SSEGetContractConfig<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, Events extends SSEEventSchemas = SSEEventSchemas, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined> = {
    method: 'get';
    pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver<z.infer<Params>> : () => string;
    requestPathParamsSchema?: Params;
    requestQuerySchema?: Query;
    requestHeaderSchema?: RequestHeaders;
    serverSentEventSchemas: Events;
    /**
     * Error response schemas by HTTP status code.
     * Used to define response shapes for errors that occur before streaming starts
     * (e.g., authentication failures, validation errors, not found).
     *
     * @example
     * ```ts
     * responseBodySchemasByStatusCode: {
     *   401: z.object({ error: z.literal('Unauthorized') }),
     *   404: z.object({ error: z.string() }),
     * }
     * ```
     */
    responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode;
    requestBodySchema?: never;
    successResponseBodySchema?: never;
    metadata?: CommonRouteDefinitionMetadata;
    description?: string;
    summary?: string;
    tags?: readonly string[];
};
/**
 * Configuration for building a POST/PUT/PATCH SSE route with request body.
 * Requires requestBodySchema for payload variants.
 */
export type SSEPayloadContractConfig<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, Body extends z.ZodTypeAny = z.ZodTypeAny, Events extends SSEEventSchemas = SSEEventSchemas, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined> = {
    method: 'post' | 'put' | 'patch';
    pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver<z.infer<Params>> : () => string;
    requestPathParamsSchema?: Params;
    requestQuerySchema?: Query;
    requestHeaderSchema?: RequestHeaders;
    requestBodySchema: Body;
    serverSentEventSchemas: Events;
    /**
     * Error response schemas by HTTP status code.
     * Used to define response shapes for errors that occur before streaming starts
     * (e.g., authentication failures, validation errors, not found).
     *
     * @example
     * ```ts
     * responseBodySchemasByStatusCode: {
     *   401: z.object({ error: z.literal('Unauthorized') }),
     *   404: z.object({ error: z.string() }),
     * }
     * ```
     */
    responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode;
    successResponseBodySchema?: never;
    metadata?: CommonRouteDefinitionMetadata;
    description?: string;
    summary?: string;
    tags?: readonly string[];
};
/**
 * Configuration for building a GET dual-mode route.
 * Requires successResponseBodySchema, forbids requestBodySchema.
 */
export type DualModeGetContractConfig<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, JsonResponse extends z.ZodTypeAny = z.ZodTypeAny, Events extends SSEEventSchemas = SSEEventSchemas, ResponseHeaders extends z.ZodTypeAny | undefined = undefined, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined> = {
    method: 'get';
    pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver<z.infer<Params>> : () => string;
    requestPathParamsSchema?: Params;
    requestQuerySchema?: Query;
    requestHeaderSchema?: RequestHeaders;
    /** Single sync response schema */
    successResponseBodySchema: JsonResponse;
    /**
     * Schema for validating response headers (sync mode only).
     * Used to define and validate headers that the server will send in the response.
     *
     * @example
     * ```ts
     * responseHeaderSchema: z.object({
     *   'x-ratelimit-limit': z.string(),
     *   'x-ratelimit-remaining': z.string(),
     * })
     * ```
     */
    responseHeaderSchema?: ResponseHeaders;
    /**
     * Alternative response schemas by HTTP status code.
     * Used to define different response shapes for error cases.
     *
     * @example
     * ```ts
     * responseBodySchemasByStatusCode: {
     *   400: z.object({ error: z.string(), details: z.array(z.string()) }),
     *   404: z.object({ error: z.string() }),
     * }
     * ```
     */
    responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode;
    serverSentEventSchemas: Events;
    requestBodySchema?: never;
    metadata?: CommonRouteDefinitionMetadata;
    description?: string;
    summary?: string;
    tags?: readonly string[];
};
/**
 * Configuration for building a POST/PUT/PATCH dual-mode route with request body.
 * Requires both requestBodySchema and successResponseBodySchema.
 */
export type DualModePayloadContractConfig<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, Body extends z.ZodTypeAny = z.ZodTypeAny, JsonResponse extends z.ZodTypeAny = z.ZodTypeAny, Events extends SSEEventSchemas = SSEEventSchemas, ResponseHeaders extends z.ZodTypeAny | undefined = undefined, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined> = {
    method: 'post' | 'put' | 'patch';
    pathResolver: Params extends z.ZodTypeAny ? RoutePathResolver<z.infer<Params>> : () => string;
    requestPathParamsSchema?: Params;
    requestQuerySchema?: Query;
    requestHeaderSchema?: RequestHeaders;
    requestBodySchema: Body;
    /** Single sync response schema */
    successResponseBodySchema: JsonResponse;
    /**
     * Schema for validating response headers (sync mode only).
     * Used to define and validate headers that the server will send in the response.
     *
     * @example
     * ```ts
     * responseHeaderSchema: z.object({
     *   'x-ratelimit-limit': z.string(),
     *   'x-ratelimit-remaining': z.string(),
     * })
     * ```
     */
    responseHeaderSchema?: ResponseHeaders;
    /**
     * Alternative response schemas by HTTP status code.
     * Used to define different response shapes for error cases.
     *
     * @example
     * ```ts
     * responseBodySchemasByStatusCode: {
     *   400: z.object({ error: z.string(), details: z.array(z.string()) }),
     *   404: z.object({ error: z.string() }),
     * }
     * ```
     */
    responseBodySchemasByStatusCode?: ResponseSchemasByStatusCode;
    serverSentEventSchemas: Events;
    metadata?: CommonRouteDefinitionMetadata;
    description?: string;
    summary?: string;
    tags?: readonly string[];
};
export declare function buildSseContract<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, JsonResponse extends z.ZodTypeAny = z.ZodTypeAny, Events extends SSEEventSchemas = SSEEventSchemas, ResponseHeaders extends z.ZodTypeAny | undefined = undefined, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined>(config: DualModeGetContractConfig<Params, Query, RequestHeaders, JsonResponse, Events, ResponseHeaders, ResponseSchemasByStatusCode>): DualModeContractDefinition<'get', Params, Query, RequestHeaders, undefined, JsonResponse, Events, ResponseHeaders, ResponseSchemasByStatusCode>;
export declare function buildSseContract<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, Events extends SSEEventSchemas = SSEEventSchemas, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined>(config: SSEGetContractConfig<Params, Query, RequestHeaders, Events, ResponseSchemasByStatusCode>): SSEContractDefinition<'get', Params, Query, RequestHeaders, undefined, Events, ResponseSchemasByStatusCode>;
export declare function buildSseContract<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, Body extends z.ZodTypeAny = z.ZodTypeAny, JsonResponse extends z.ZodTypeAny = z.ZodTypeAny, Events extends SSEEventSchemas = SSEEventSchemas, ResponseHeaders extends z.ZodTypeAny | undefined = undefined, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined>(config: DualModePayloadContractConfig<Params, Query, RequestHeaders, Body, JsonResponse, Events, ResponseHeaders, ResponseSchemasByStatusCode>): DualModeContractDefinition<'post' | 'put' | 'patch', Params, Query, RequestHeaders, Body, JsonResponse, Events, ResponseHeaders, ResponseSchemasByStatusCode>;
export declare function buildSseContract<Params extends z.ZodTypeAny | undefined = undefined, Query extends z.ZodTypeAny | undefined = undefined, RequestHeaders extends z.ZodTypeAny | undefined = undefined, Body extends z.ZodTypeAny = z.ZodTypeAny, Events extends SSEEventSchemas = SSEEventSchemas, ResponseSchemasByStatusCode extends Partial<Record<HttpStatusCode, z.ZodTypeAny>> | undefined = undefined>(config: SSEPayloadContractConfig<Params, Query, RequestHeaders, Body, Events, ResponseSchemasByStatusCode>): SSEContractDefinition<'post' | 'put' | 'patch', Params, Query, RequestHeaders, Body, Events, ResponseSchemasByStatusCode>;
