import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { RequiredPermission } from '../decorators/require-permission.decorator';

@Injectable()
export class PermissionGuard implements CanActivate {
  constructor(private reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const requiredPermission = this.reflector.getAllAndOverride<RequiredPermission>(
      'permission',
      [context.getHandler(), context.getClass()],
    );

    if (!requiredPermission) {
      return true;
    }

    const request = context.switchToHttp().getRequest();
    const user = request.user;

    if (!user) {
      return false;
    }

    // 这里可以根据实际的权限系统进行调整
    // 示例实现：检查用户是否有所需的权限
    const hasPermission = this.checkPermission(user, requiredPermission);
    return hasPermission;
  }

  private checkPermission(user: any, permission: RequiredPermission): boolean {
    // 实现权限检查逻辑
    // 这是一个示例实现，实际项目中需要根据具体的权限系统来实现
    
    // 超级管理员拥有所有权限
    if (user.role === 'super_admin') {
      return true;
    }

    // 检查用户是否有对应资源和操作的权限
    const userPermissions = user.permissions || [];
    return userPermissions.some((perm: any) => 
      perm.resource === permission.resource && 
      perm.action === permission.action
    );
  }
}