import { Controller, Get, Param, Patch, Query, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { GetUser } from 'src/auth/get-user.decorator';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { RequireModule, RequirePermission } from 'src/auth/decorators';
import { ModuleGuard } from 'src/auth/guards/module.guard';
import { PermissionGuard } from 'src/auth/guards/permission.guard';
import { RecibosService } from './recibos.service';

@ApiTags('retenciones')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('COBRANZAS')
@Controller({ path: 'retenciones', version: '1' })
export class RetencionesController {
  constructor(private readonly recibosService: RecibosService) {}

  @Get('libro')
  @RequirePermission('COBRANZAS', 'COB_RET_RETENCION_VER')
  @ApiOperation({ summary: 'Libro mensual de retenciones recibidas' })
  @ApiQuery({ name: 'periodo', required: true, description: 'YYYY-MM' })
  libro(@GetUser() user: LoginUserInfo, @Query('periodo') periodo: string) {
    return this.recibosService.libroRetenciones(user.empresa_id, periodo);
  }

  @Patch(':id/declarar')
  @RequirePermission('COBRANZAS', 'COB_RET_RETENCION_EDITAR')
  @ApiOperation({ summary: 'Marcar retención como declarada en SET' })
  @ApiQuery({ name: 'periodo', required: true, description: 'YYYY-MM del período declarado' })
  declarar(
    @GetUser() user: LoginUserInfo,
    @Param('id') id: string,
    @Query('periodo') periodo: string,
  ) {
    return this.recibosService.marcarDeclarada(user.empresa_id, id, periodo);
  }
}
