import { Controller, Get, Param, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger';
import { RequireModule } from 'src/auth/decorators/require-module.decorator';
import { RequirePermission } from 'src/auth/decorators/require-permission.decorator';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { GetUser } from 'src/auth/get-user.decorator';
import { ModuleGuard } from 'src/auth/guards/module.guard';
import { PermissionGuard } from 'src/auth/guards/permission.guard';
import { PlanLimitsService } from './plan-limits.service';

@ApiTags('Plan Limits')
@Controller({ path: 'plan-limits', version: '1' })
@UseGuards(AuthGuard('jwt'), ModuleGuard, PermissionGuard)
export class PlanLimitsController {
  constructor(private readonly planLimitsService: PlanLimitsService) {}

  /**
   * Uso del plan de la propia empresa: info básica accesible para cualquier
   * usuario autenticado (se usa en PlanUsageCard, dashboards, banners).
   */
  @Get('usage')
  @ApiBearerAuth()
  @ApiOperation({ summary: 'Obtener uso actual vs límites del plan activo de mi empresa' })
  @ApiResponse({ status: 200, description: 'Uso actual del plan' })
  getUsage(@GetUser() user: LoginUserInfo) {
    return this.planLimitsService.getUsageInfo(user.empresa_id);
  }

  @Get('usage/:empresaId')
  @RequireModule('ADMINISTRACION')
  @RequirePermission('ADMINISTRACION', 'ADM_SUSC_SUSCRIPCION_VER')
  @ApiBearerAuth()
  @ApiOperation({ summary: 'Obtener uso de una empresa específica (holding/admin)' })
  @ApiParam({ name: 'empresaId', description: 'ID de la empresa a consultar' })
  @ApiResponse({ status: 200, description: 'Uso actual del plan de la empresa' })
  getUsageByEmpresa(@Param('empresaId') empresaId: string) {
    return this.planLimitsService.getUsageInfo(empresaId);
  }
}
