import {
  CanActivate,
  ExecutionContext,
  ForbiddenException,
  Injectable,
  UnauthorizedException,
} from "@nestjs/common";
import { RolPlataforma } from "../../control-plane/entities/identidad.entity";

// Corre DESPUES de JwtAuthGuard (necesita req.user ya poblado por
// JwtStrategy). Mira rolPlataforma, NUNCA el rol local del tenant (ese es el
// de PermissionGuard, para features dentro de un tenant) — el panel de
// administracion de tenants es una superficie de PLATAFORMA, no de un
// tenant en particular.
@Injectable()
export class PlatformAdminGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest();
    const user = request.user;

    if (!user) {
      throw new UnauthorizedException("Usuario no autenticado");
    }

    if (user.rolPlataforma !== RolPlataforma.ADMIN_PLATAFORMA) {
      throw new ForbiddenException(
        "Este panel es solo para administradores de plataforma",
      );
    }

    return true;
  }
}
