import { Body, Controller, Delete, Get, Param, Patch, Post, Put, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import type { LoginUserInfo } from '../auth/dto/login.dto';
import { GetUser } from '../auth/get-user.decorator';
import { AiHoldingService } from './ai-holding.service';
import { SetCuotaDto, TarifaDto } from './dto/ai-holding.dto';

/**
 * Administración de tokens de IA a nivel holding. El alcance es la red del holding
 * del usuario (su empresa + subsidiarias), resuelto por jerarquía.
 */
@Controller({ version: '1', path: 'ai-holding' })
@UseGuards(AuthGuard('jwt'))
export class AiHoldingController {
  constructor(private readonly service: AiHoldingService) {}

  @Get('consumo')
  consumo(@GetUser() user: LoginUserInfo) {
    return this.service.consumoRed(user.empresa_id);
  }

  @Patch('empresas/:empresaId/cuota')
  setCuota(@GetUser() user: LoginUserInfo, @Param('empresaId') empresaId: string, @Body() dto: SetCuotaDto) {
    return this.service.setCuota(user.empresa_id, empresaId, dto);
  }

  // ── Tarifas de IA (precio por proveedor+modelo, nivel sistema) ──────────────
  // TODO(gobernanza): restringir a superadmin/plataforma; hoy accesible al holding.
  @Get('tarifas')
  listarTarifas(@GetUser() user: LoginUserInfo) {
    return this.service.listarTarifas(user.empresa_id);
  }

  @Put('tarifas')
  upsertTarifa(@GetUser() user: LoginUserInfo, @Body() dto: TarifaDto) {
    return this.service.upsertTarifa(user.empresa_id, dto);
  }

  @Delete('tarifas/:id')
  eliminarTarifa(@GetUser() user: LoginUserInfo, @Param('id') id: string) {
    return this.service.eliminarTarifa(user.empresa_id, id);
  }

  // Recalcula el costo USD del consumo del mes según las tarifas actuales.
  @Post('recalcular-costos')
  recalcularCostos(@GetUser() user: LoginUserInfo) {
    return this.service.recalcularCostos(user.empresa_id);
  }
}
