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 { ConfigMoraService } from './config-mora.service';
import { UpsertConfigMoraDto } from './dto/config-mora.dto';

@ApiTags('Config Mora')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('COBRANZAS')
@Controller({ path: 'config-mora', version: '1' })
export class ConfigMoraController {
  constructor(private readonly configMoraService: ConfigMoraService) {}

  @Get()
  @RequirePermission('COBRANZAS', 'COB_CFM_CONFIG_VER')
  @ApiOperation({ summary: 'Obtener configuración de mora de la empresa' })
  get(@GetUser() user: LoginUserInfo) {
    return this.configMoraService.getOrCreate(user.empresa_id);
  }

  @Put()
  @RequirePermission('COBRANZAS', 'COB_CFM_CONFIG_EDITAR')
  @ApiOperation({ summary: 'Guardar configuración de mora' })
  upsert(@Body() dto: UpsertConfigMoraDto, @GetUser() user: LoginUserInfo) {
    return this.configMoraService.upsert(user.empresa_id, dto);
  }
}
