import {
  Controller,
  Get,
  Post,
  Put,
  Body,
  Param,
  Query,
  UseGuards,
  Request,
  ParseUUIDPipe,
} from '@nestjs/common';
import { PromptService } from './prompt.service';
import {
  CreatePromptTemplateDto,
  UpdatePromptTemplateDto,
  QueryPromptTemplateDto,
} from '../dto';
import { PermissionsGuard } from '@modules/organization/auth/guards/permissions.guard';
import { RequirePermissions } from '@common/decorators/permissions.decorator';
import { Auditable, Sensitive } from '@core/observability/audit/decorators/auditable.decorator';

@Controller('ai-assistant/prompts')
export class PromptController {
  constructor(private readonly promptService: PromptService) {}

  /**
   * 获取 Prompt 模板列表
   */
  @Get()

  @RequirePermissions('ai:prompt:manage')
  async findAll(@Query() query: QueryPromptTemplateDto) {
    return this.promptService.findPromptTemplates(query);
  }

  /**
   * 获取 Prompt 模板详情
   */
  @Get(':id')

  @RequirePermissions('ai:prompt:manage')
  async findOne(@Param('id', ParseUUIDPipe) id: string) {
    return this.promptService.findPromptTemplate(id);
  }

  /**
   * 创建 Prompt 模板
   */
  @Post()
  @Auditable()

  @RequirePermissions('ai:prompt:manage')
  async create(
    @Body() dto: CreatePromptTemplateDto,
    @Request() req: any,
  ) {
    return this.promptService.createPromptTemplate(dto, req.user.userId);
  }

  /**
   * 更新 Prompt 模板
   */
  @Put(':id')
  @Auditable()

  @RequirePermissions('ai:prompt:manage')
  async update(
    @Param('id', ParseUUIDPipe) id: string,
    @Body() dto: UpdatePromptTemplateDto,
  ) {
    return this.promptService.updatePromptTemplate(id, dto);
  }

  /**
   * 激活 Prompt 模板
   */
  @Post(':id/activate')
  @Auditable()
  @Sensitive()

  @RequirePermissions('ai:prompt:manage')
  async activate(@Param('id', ParseUUIDPipe) id: string) {
    return this.promptService.activatePromptTemplate(id);
  }
}
