/**
 * 表单版本审核控制器
 * 完全符合 API 文档规范 v2.0 - 4个端点
 * 管理员审核和设计者查询接口
 */

import {
  Controller,
  Get,
  Param,
  Query,
  UseGuards,
} from '@nestjs/common';
// import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger';
import { PermissionsGuard } from '@modules/organization/auth/guards/permissions.guard';
import { RequirePermissions } from '@common/decorators/permissions.decorator';
import { CurrentUser } from '@common/decorators/current-user.decorator';
import { FormVersionService } from '../services';
import {
  QueryPendingReviewDto,
  QueryMySubmissionsDto,
} from '../dto/form-version-review.dto';

// @ApiTags('Form Version Review - 版本审核管理')
@Controller('form-versions')
// @ApiBearerAuth()
export class FormVersionReviewController {
  constructor(private readonly formVersionService: FormVersionService) {}

  // ============================================
  // 静态路由必须在动态路由之前
  // ============================================

  // 6.1 获取待审核列表 🔒 Admin Only
  @Get('pending-review')
  @RequirePermissions('form:admin')
  // @ApiOperation({
  //   summary: '获取待审核列表',
  //   description: '🔐 Admin Only - 管理员获取所有待审核的表单版本',
  // })
  async findPendingReview(@Query() query: QueryPendingReviewDto) {
    return this.formVersionService.findPendingReview(query);
  }

  // 6.4 我提交的审核
  @Get('my-submissions')
  @RequirePermissions('form:design')
  // @ApiOperation({ summary: '我提交的审核' })
  async findMySubmissions(
    @Query() query: QueryMySubmissionsDto,
    @CurrentUser('userId') userId: string
  ) {
    return this.formVersionService.findMySubmissions(query, userId);
  }

  // ============================================
  // 动态路由
  // ============================================

  // 6.2 预览待审核表单 🔒 Admin Only
  @Get(':versionId/preview')
  @RequirePermissions('form:admin')
  // @ApiOperation({
  //   summary: '预览待审核表单',
  //   description: '🔐 Admin Only - 预览待审核版本的表单效果',
  // })
  async previewForReview(@Param('versionId') versionId: string) {
    return this.formVersionService.previewForReview(versionId);
  }

  // 6.3 获取审核历史
  @Get(':versionId/review-history')
  @RequirePermissions('form:read')
  // @ApiOperation({ summary: '获取审核历史' })
  async getReviewHistory(@Param('versionId') versionId: string) {
    return this.formVersionService.getReviewHistory(versionId);
  }
}
