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

import {
  Controller,
  Get,
  Post,
  Put,
  Delete,
  Body,
  Param,
  ParseIntPipe,
  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 { FormTranslationService } from '../services';
import { Auditable, Sensitive, Financial } from '@core/observability/audit/decorators/auditable.decorator';
import {
  UpdateFormTranslationDto,
  BatchImportTranslationsDto,
} from '../dto';

// @ApiTags('Form Translations - 表单翻译')
@Controller('forms/:formIdentifier/versions/:version/translations')
// @ApiBearerAuth()
export class FormTranslationsController {
  constructor(
    private readonly formTranslationService: FormTranslationService
  ) {}

  // ============================================
  // 4.1 获取所有翻译
  // ============================================

  @Get()
  @RequirePermissions('form:read')
  // @ApiOperation({ summary: '获取所有翻译' })
  async findAll(
    @Param('formIdentifier') formIdentifier: string,
    @Param('version', ParseIntPipe) version: number
  ) {
    const translations = await this.formTranslationService.findAll(formIdentifier, version);
    return { items: translations };
  }

  // ============================================
  // 4.2 获取指定语言的翻译
  // ============================================

  @Get(':locale')
  @RequirePermissions('form:read')
  // @ApiOperation({ summary: '获取指定语言的翻译' })
  async findOne(
    @Param('formIdentifier') formIdentifier: string,
    @Param('version', ParseIntPipe) version: number,
    @Param('locale') locale: string
  ) {
    return this.formTranslationService.findOne(
      formIdentifier,
      version,
      locale
    );
  }

  // ============================================
  // 4.3 创建/更新翻译 (PUT - 幂等操作)
  // ============================================

  @Put(':locale')
  @Auditable()
  @Sensitive()
  @RequirePermissions('form:translation:create')
  // @ApiOperation({ summary: '创建/更新翻译' })
  async upsert(
    @Param('formIdentifier') formIdentifier: string,
    @Param('version', ParseIntPipe) version: number,
    @Param('locale') locale: string,
    @Body() dto: UpdateFormTranslationDto
  ) {
    return this.formTranslationService.upsert(
      formIdentifier,
      version,
      locale,
      dto
    );
  }

  // ============================================
  // 4.4 删除翻译
  // ============================================

  @Delete(':locale')
  @Auditable()
  @Sensitive()
  @RequirePermissions('form:translation:delete')
  // @ApiOperation({ summary: '删除翻译' })
  async remove(
    @Param('formIdentifier') formIdentifier: string,
    @Param('version', ParseIntPipe) version: number,
    @Param('locale') locale: string
  ) {
    return this.formTranslationService.remove(
      formIdentifier,
      version,
      locale
    );
  }

  // ============================================
  // 4.5 检查翻译完整性
  // ============================================

  @Get(':locale/check')
  @RequirePermissions('form:read')
  // @ApiOperation({ summary: '检查翻译完整性' })
  async checkCompleteness(
    @Param('formIdentifier') formIdentifier: string,
    @Param('version', ParseIntPipe) version: number,
    @Param('locale') locale: string
  ) {
    return this.formTranslationService.checkCompleteness(
      formIdentifier,
      version,
      locale
    );
  }

  // ============================================
  // 4.6 批量导入翻译
  // ============================================

  @Post('import')
  @Auditable()
  @Sensitive()
  @HttpCode(HttpStatus.OK)
  @RequirePermissions('form:translation:create')
  // @ApiOperation({ summary: '批量导入翻译' })
  async batchImport(
    @Param('formIdentifier') formIdentifier: string,
    @Param('version', ParseIntPipe) version: number,
    @Body() dto: BatchImportTranslationsDto
  ) {
    return this.formTranslationService.batchImport(
      formIdentifier,
      version,
      dto
    );
  }
}

