import { ClientRuntimeConfig } from "../types.cjs";
import { QueryClient } from "@tanstack/react-query";
import { AnyRouteMatch, AnyRouter, RouterHistory } from "@tanstack/react-router";

//#region src/ui/types.d.ts
interface RouterContext<TSession = unknown> {
  queryClient: QueryClient;
  assetsUrl: string;
  runtimeConfig?: Partial<ClientRuntimeConfig>;
  session?: TSession;
}
interface RouterContextWithApi<TApiClient = unknown, TSession = unknown> extends RouterContext<TSession> {
  apiClient?: TApiClient;
}
interface CreateRouterOptions<TApiClient = unknown, TSession = unknown> {
  history?: RouterHistory;
  context?: Partial<RouterContextWithApi<TApiClient, TSession>>;
  basepath?: string;
}
type HeadMeta = NonNullable<AnyRouteMatch["meta"]>[number];
type HeadLink = NonNullable<AnyRouteMatch["links"]>[number];
type HeadScript = NonNullable<AnyRouteMatch["headScripts"]>[number];
interface HeadData {
  meta: HeadMeta[];
  links: HeadLink[];
  scripts: HeadScript[];
}
interface RenderOptions<TSession = unknown> {
  assetsUrl: string;
  runtimeConfig: Partial<ClientRuntimeConfig>;
  basepath?: string;
  session?: TSession;
}
interface RenderOptionsWithApi<TApiClient = unknown, TSession = unknown> extends RenderOptions<TSession> {
  apiClient: TApiClient;
  authClient?: unknown;
}
interface RenderResult {
  stream: ReadableStream;
  statusCode: number;
  headers: Headers;
}
interface RouterModule<TApiClient = unknown, TSession = unknown> {
  createRouter: (opts?: CreateRouterOptions<TApiClient, TSession>) => {
    router: AnyRouter;
    queryClient: QueryClient;
  };
  getRouteHead: (pathname: string, context?: Partial<RouterContextWithApi<TApiClient, TSession>>) => Promise<HeadData>;
  renderToStream: (request: Request, options: RenderOptionsWithApi<TApiClient, TSession>) => Promise<RenderResult>;
}
//#endregion
export { CreateRouterOptions, HeadData, HeadLink, HeadMeta, HeadScript, RenderOptions, RenderOptionsWithApi, RenderResult, RouterContext, RouterContextWithApi, RouterModule };
//# sourceMappingURL=types.d.cts.map