import { Controller, Get, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { AppPermission } from '@aechr/shared';
import { Permissions as PermissionsDecorator } from '../../common/decorators/permissions.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { ApiJwtErrorResponses } from '../../common/swagger/api-error-responses.decorator';
import { ApiArrayEnvelopeOkResponse } from '../../common/swagger/api-success-responses.decorator';
import { PermissionResponseDto } from '../../common/swagger/response-models.dto';
import { PermissionsService } from './permissions.service';

@ApiTags('Permissions')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Controller('permissions')
export class PermissionsController {
  constructor(private readonly permissionsService: PermissionsService) {}

  @Get()
  @PermissionsDecorator(AppPermission.PERMISSIONS_READ)
  @ApiOperation({ summary: 'List available permissions' })
  @ApiArrayEnvelopeOkResponse(PermissionResponseDto, 'Permission list')
  @ApiJwtErrorResponses()
  list() {
    return this.permissionsService.list();
  }
}
