import { Body, Controller, Get, Put, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, 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 { CostosOperacionCreditoService } from './costos-operacion-credito.service';
import { UpsertCostosOperacionCreditoDto } from './dto/costos-operacion-credito.dto';

@ApiTags('Costos Operación Crédito')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('REPORTES')
@Controller({ path: 'costos-operacion-credito', version: '1' })
export class CostosOperacionCreditoController {
  constructor(private readonly service: CostosOperacionCreditoService) {}

  @Get()
  @RequirePermission('REPORTES', 'REP_ROC_CONFIG_VER')
  @ApiOperation({ summary: 'Obtener configuración de costos de operación a crédito de la empresa' })
  get(@GetUser() user: LoginUserInfo) {
    return this.service.getOrCreate(user.empresa_id);
  }

  @Put()
  @RequirePermission('REPORTES', 'REP_ROC_CONFIG_EDITAR')
  @ApiOperation({ summary: 'Guardar configuración de costos de operación a crédito' })
  upsert(@Body() dto: UpsertCostosOperacionCreditoDto, @GetUser() user: LoginUserInfo) {
    return this.service.upsert(user.empresa_id, dto, user.username);
  }
}
