import { Controller, Post, Body, Req, UseGuards, HttpException, HttpStatus } from '@nestjs/common';
import { ApiTags, ApiBearerAuth } from '@nestjs/swagger';
import { AuthGuard } from '@nestjs/passport';
import { AIGatewayService } from '../ai/ai-gateway.service';
import { UserAiAssistantService } from './ai-assistant.service';

@ApiTags('AI 助手')
@Controller('ai-assistant')
export class AiAssistantController {
  constructor(
    private aiGateway: AIGatewayService,
    private aiAssistant: UserAiAssistantService,
  ) {}

  @Post('chat')
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  async chat(
    @Req() req: any,
    @Body() body: { messages: { role: string; content: string }[]; pageContext?: string },
  ) {
    try {
      const { messages, pageContext } = body;
      const toolsDesc = this.aiAssistant.getToolsDescription();

      const systemContent = `你是宇之然 AI 学习与实践平台的智能助手，帮助用户了解和使用平台的所有功能。
你可以回答用户的问题，也可以调用工具来执行操作（如搜索内容、查看学习分析、管理通知等）。

${pageContext ? `当前页面：${pageContext}\n\n` : ''}可用工具列表（需要执行操作时，返回 JSON：{"tool":"工具名","params":{...},"description":"简述"}）：

${toolsDesc}

注意：
1. 当用户请求执行具体操作（如搜索、查看数据、管理通知）时，返回一个 JSON 工具调用。
2. 普通对话问题直接文字回答，不需要返回 JSON。
3. 每次只需要返回一个 JSON 工具调用，不要包含多余文字。
4. 对于 navigate 工具，前端会自动跳转，你只需要返回 JSON 即可。`;

      const apiMessages = [
        { role: 'system' as const, content: systemContent },
        ...messages.map(m => ({ role: m.role as 'user' | 'assistant', content: m.content })),
      ];

      const reply = await this.aiGateway.chat('general', apiMessages, { temperature: 0.7, max_tokens: 2000 });
      return { reply };
    } catch (err: any) {
      throw new HttpException(err.message || 'AI 助手请求失败', HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

  @Post('action')
  @UseGuards(AuthGuard('jwt'))
  @ApiBearerAuth()
  async action(
    @Req() req: any,
    @Body() body: { tool: string; params: Record<string, any>; messages: { role: string; content: string }[] },
  ) {
    const userId = req.user.userId;
    const result = await this.aiAssistant.execute({ tool: body.tool, params: body.params }, userId);

    try {
      const apiMessages = [
        { role: 'system' as const, content: '你是一个AI助手，下面是用户请求的执行结果，请用自然语言简洁总结给用户。' },
        ...body.messages.map(m => ({ role: m.role as 'user' | 'assistant', content: m.content })),
        { role: 'assistant' as const, content: `【工具执行结果】\n工具: ${body.tool}\n参数: ${JSON.stringify(body.params)}\n结果: ${result.summary}\n数据: ${JSON.stringify(result.data)}` },
      ];
      const reply = await this.aiGateway.chat('general', apiMessages, { temperature: 0.3, max_tokens: 1000 });
      return { reply, result };
    } catch {
      return { reply: result.summary, result };
    }
  }
}
