import { IJsDocTagInfo } from "typia";

import { IReflectController } from "./IReflectController";
import { IReflectImport } from "./IReflectImport";
import { IReflectMcpOperation } from "./IReflectMcpOperation";
import { IReflectMcpOperationParameter } from "./IReflectMcpOperationParameter";
import { IReflectType } from "./IReflectType";

/**
 * Final typed representation of an MCP tool route.
 *
 * Carries everything the SDK generator needs to emit a typed client function:
 * the controller reference, accessor path, typia-derived input schema, and
 * input/output type info.
 */
export interface ITypedMcpRoute {
  protocol: "mcp";
  controller: IReflectController;
  name: string;
  toolName: string;
  title: string | null;
  toolDescription: string | null;
  accessor: string[];
  function: Function;
  input: IReflectMcpOperationParameter | null;
  returnType: IReflectType | null;
  inputSchema: object;
  outputSchema: object | null;
  annotations: IReflectMcpOperation.IAnnotations | null;
  imports: IReflectImport[];
  description: string | null;
  jsDocTags: IJsDocTagInfo[];
}
