/**
 * 表单模板控制器
 * 完全符合 API 文档规范 - 6个端点
 */

import {
  Controller,
  Get,
  Post,
  Patch,
  Delete,
  Body,
  Param,
  Query,
  UseGuards,
  HttpCode,
  HttpStatus,
} from '@nestjs/common';
// import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger';  // TODO: Install @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 { FormTemplateService } from '../services';
import { Auditable, Sensitive, Financial } from '@core/observability/audit/decorators/auditable.decorator';
import {
  CreateFormTemplateDto,
  UpdateFormTemplateDto,
  QueryFormTemplatesDto,
  CreateFormFromTemplateDto,
} from '../dto';

// @ApiTags('Form Templates - 表单模板')
@Controller('form-templates')
// @ApiBearerAuth()
export class FormTemplatesController {
  constructor(private readonly formTemplateService: FormTemplateService) {}

  // ============================================
  // 5.1 创建表单模板
  // ============================================

  @Post()
  @Auditable()
  @Sensitive()
  @RequirePermissions('form:template:create')
  // @ApiOperation({ summary: '创建表单模板' })
  async create(
    @Body() dto: CreateFormTemplateDto,
    @CurrentUser('userId') userId: string
  ) {
    return this.formTemplateService.create(dto, userId);
  }

  // ============================================
  // 5.2 获取表单模板列表
  // ============================================

  @Get()
  @RequirePermissions('form:template:read')
  // @ApiOperation({ summary: '获取表单模板列表' })
  async findAll(
    @Query() query: QueryFormTemplatesDto,
    @CurrentUser('userId') userId: string
  ) {
    return this.formTemplateService.findAll(query, userId);
  }

  // ============================================
  // 5.3 获取单个表单模板
  // ============================================

  @Get(':templateIdentifier')
  @RequirePermissions('form:template:read')
  // @ApiOperation({ summary: '获取单个表单模板' })
  async findOne(@Param('templateIdentifier') templateIdentifier: string) {
    return this.formTemplateService.findOne(templateIdentifier);
  }

  // ============================================
  // 5.4 更新表单模板
  // ============================================

  @Patch(':templateIdentifier')
  @Auditable()
  @Sensitive()
  @RequirePermissions('form:template:update')
  // @ApiOperation({ summary: '更新表单模板' })
  async update(
    @Param('templateIdentifier') templateIdentifier: string,
    @Body() dto: UpdateFormTemplateDto,
    @CurrentUser('userId') userId: string
  ) {
    return this.formTemplateService.update(
      templateIdentifier,
      dto,
      userId
    );
  }

  // ============================================
  // 5.5 删除表单模板
  // ============================================

  @Delete(':templateIdentifier')
  @Auditable()
  @Sensitive()
  @RequirePermissions('form:template:delete')
  // @ApiOperation({ summary: '删除表单模板' })
  async remove(@Param('templateIdentifier') templateIdentifier: string) {
    return this.formTemplateService.remove(templateIdentifier);
  }

  // ============================================
  // 5.6 从模板创建表单
  // ============================================

  @Post(':templateIdentifier/create-form')
  @Auditable()
  @Sensitive()
  @HttpCode(HttpStatus.CREATED)
  @RequirePermissions('form:create')
  // @ApiOperation({ summary: '从模板创建表单' })
  async createFormFromTemplate(
    @Param('templateIdentifier') templateIdentifier: string,
    @Body() dto: CreateFormFromTemplateDto,
    @CurrentUser('userId') userId: string
  ) {
    return this.formTemplateService.createFormFromTemplate(
      templateIdentifier,
      dto,
      userId
    );
  }
}

