import { Body, Controller, Get, Post, Put, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import type { LoginUserInfo } from '../../auth/dto/login.dto';
import { RequireModule, RequirePermission } from '../../auth/decorators';
import { ModuleGuard } from '../../auth/guards/module.guard';
import { PermissionGuard } from '../../auth/guards/permission.guard';
import { GetUser } from '../../auth/get-user.decorator';
import { ActualizarCarteraConfigDto } from '../dto/cartera-config.dto';
import { CarteraConfigService } from './cartera-config.service';

@ApiTags('Cartera Inteligente — Config')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
@RequireModule('COBRANZAS')
@Controller({ path: 'cartera/config', version: '1' })
export class CarteraConfigController {
  constructor(private readonly service: CarteraConfigService) {}

  @Get()
  @RequirePermission('COBRANZAS', 'COB_CART_VER')
  @ApiOperation({ summary: 'Obtener config operativa (auto-crea con defaults)' })
  get(@GetUser() user: LoginUserInfo) {
    return this.service.getOrCreate(user.empresa_id);
  }

  @Put()
  @RequirePermission('COBRANZAS', 'COB_CART_CONFIGURAR')
  @ApiOperation({ summary: 'Actualizar modo operativo o fuente default' })
  actualizar(@Body() dto: ActualizarCarteraConfigDto, @GetUser() user: LoginUserInfo) {
    return this.service.actualizar(user.empresa_id, dto);
  }

  @Post('completar-onboarding')
  @RequirePermission('COBRANZAS', 'COB_CART_CONFIGURAR')
  @ApiOperation({ summary: 'Marcar el onboarding como completado para este tenant' })
  completarOnboarding(@GetUser() user: LoginUserInfo) {
    return this.service.completarOnboarding(user.empresa_id);
  }
}
