// v1.12 Track B.2: codecontext wrapper — get_file_analysis.

import { z } from 'zod';
import type { ToolDef } from '../../tools.js';
import { callCodecontext, type CodecontextResponse } from '../../codecontext_client.js';

export const GetFileAnalysisInput = z.object({
  file_path: z.string().trim().min(1),
});
export type GetFileAnalysisInputT = z.infer<typeof GetFileAnalysisInput>;

const DESCRIPTION =
  'Returns detailed analysis of a single file: symbols defined, imports, exports, and inferred role. ' +
  'Use when you have a specific file in mind and need its structure without view_file-ing the whole thing. ' +
  'Tree-sitter coverage: full for JS/Python/Java/Go/Rust/C++. TypeScript symbols are approximate. ' +
  'PHP and SQL are not supported — fall back to view_file for those.';

export async function executeGetFileAnalysis(
  input: GetFileAnalysisInputT,
  projectPath: string,
  fetcher: typeof fetch = fetch,
): Promise<CodecontextResponse> {
  return callCodecontext(
    {
      toolName: 'get_file_analysis',
      args: { file_path: input.file_path },
      projectPath,
    },
    fetcher,
  );
}

export const getFileAnalysis: ToolDef<GetFileAnalysisInputT> = {
  name: 'get_file_analysis',
  description: DESCRIPTION,
  inputSchema: GetFileAnalysisInput,
  jsonSchema: {
    type: 'function',
    function: {
      name: 'get_file_analysis',
      description: DESCRIPTION,
      parameters: {
        type: 'object',
        properties: {
          file_path: {
            type: 'string',
            description: 'Absolute or project-relative path to the file.',
          },
        },
        required: ['file_path'],
        additionalProperties: false,
      },
    },
  },
  async execute(input, projectRoot) {
    return await executeGetFileAnalysis(input, projectRoot);
  },
};
