syntax = "proto3";

package ai.service;

option java_multiple_files = true;
option java_package = "cn.meowrain.aioj.backend.aiservice.grpc";
option java_outer_classname = "AIServiceProto";

// AI 代码分析服务
service AIService {
  // 代码分析
  rpc AnalyzeCode(AnalyzeCodeRequest) returns (AnalyzeCodeResponse);

  // 代码优化建议
  rpc OptimizeCode(OptimizeCodeRequest) returns (OptimizeCodeResponse);

  // 生成测试用例
  rpc GenerateTestCases(GenerateTestCasesRequest) returns (GenerateTestCasesResponse);

  // 代码解释
  rpc ExplainCode(ExplainCodeRequest) returns (ExplainCodeResponse);
}

// 代码分析请求
message AnalyzeCodeRequest {
  string code = 1;           // 代码内容
  string language = 2;       // 编程语言 (python, java, cpp, etc.)
  string question_id = 3;    // 题目ID
  string user_id = 4;        // 用户ID
}

// 代码分析响应
message AnalyzeCodeResponse {
  bool success = 1;          // 是否成功
  string message = 2;        // 响应消息
  CodeAnalysis analysis = 3; // 分析结果
}

// 代码分析结果
message CodeAnalysis {
  repeated string issues = 1;           // 发现的问题
  repeated string suggestions = 2;      // 改进建议
  int32 complexity_score = 3;           // 复杂度评分 (0-100)
  int32 performance_score = 4;          // 性能评分 (0-100)
  int32 readability_score = 5;          // 可读性评分 (0-100)
  string time_complexity = 6;           // 时间复杂度
  string space_complexity = 7;          // 空间复杂度
  repeated string best_practices = 8;   // 最佳实践建议
}

// 代码优化请求
message OptimizeCodeRequest {
  string code = 1;           // 代码内容
  string language = 2;       // 编程语言
  string optimization_type = 3; // 优化类型 (performance, readability, memory)
}

// 代码优化响应
message OptimizeCodeResponse {
  bool success = 1;
  string message = 2;
  string optimized_code = 3;  // 优化后的代码
  repeated string improvements = 4; // 改进说明
}

// 生成测试用例请求
message GenerateTestCasesRequest {
  string code = 1;           // 代码内容
  string language = 2;       // 编程语言
  string problem_description = 3; // 问题描述
}

// 生成测试用例响应
message GenerateTestCasesResponse {
  bool success = 1;
  string message = 2;
  repeated TestCase test_cases = 3; // 测试用例列表
}

// 测试用例
message TestCase {
  string input = 1;          // 输入
  string expected_output = 2; // 预期输出
  string description = 3;    // 描述
}

// 代码解释请求
message ExplainCodeRequest {
  string code = 1;           // 代码内容
  string language = 2;       // 编程语言
  string detail_level = 3;   // 详细程度 (brief, normal, detailed)
}

// 代码解释响应
message ExplainCodeResponse {
  bool success = 1;
  string message = 2;
  string explanation = 3;    // 代码解释
  repeated string key_points = 4; // 关键点
}
