import {
  Controller,
  Get,
  Post,
  Body,
  Query,
} from '@nestjs/common';
import { ReleaseNotesService } from '../services/release-notes.service';
import { CreateReleaseNoteDto, QueryReleaseNoteDto } from '../dto';
import { CurrentUser } from '@common/decorators/current-user.decorator';
import { RequirePermissions } from '@common/decorators/permissions.decorator';
import { DEVTRACKER_PERMISSIONS } from '../constants/permissions';

/**
 * 更新记录控制器
 * 路由前缀: /api/v1/devtracker/release-notes
 */
@Controller('devtracker/release-notes')
export class ReleaseNotesController {
  constructor(private readonly releaseNotesService: ReleaseNotesService) {}

  private mapReleaseNote(note: any) {
    return {
      id: note.id,
      version: note.version,
      title: note.title,
      content: note.content,
      releasedAt: note.releasedAt,
      createdBy: note.createdBy,
      createdAt: note.createdAt,
      updatedAt: note.updatedAt,
    };
  }

  @Get()
  @RequirePermissions(DEVTRACKER_PERMISSIONS.READ)
  async findAll(@Query() query: QueryReleaseNoteDto) {
    const result = await this.releaseNotesService.findAll(query);
    return {
      items: result.items.map((note) => this.mapReleaseNote(note)),
      pagination: result.pagination,
    };
  }

  @Post()
  @RequirePermissions(DEVTRACKER_PERMISSIONS.MANAGE)
  async create(
    @Body() dto: CreateReleaseNoteDto,
    @CurrentUser('userId') userId: string,
  ) {
    const note = await this.releaseNotesService.create({
      version: dto.version,
      title: dto.title,
      content: dto.content,
      releasedAt: dto.releasedAt,
      createdBy: userId,
    });
    return this.mapReleaseNote(note);
  }
}
