import { Injectable, CanActivate, ExecutionContext, HttpException, HttpStatus } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { ModelsService } from 'src/models/models.service';
import { Types } from 'mongoose';

@Injectable()
export class RolesGuard implements CanActivate {
    constructor(
        private reflector: Reflector,
        private readonly models: ModelsService
    ) { }

    async canActivate(context: ExecutionContext): Promise<boolean> {
        const requiredRoles = this.reflector.getAllAndOverride<string[]>('roles', [
            context.getHandler(),
            context.getClass(),
        ]);

        if (!requiredRoles) {
            return true;
        }

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

        if (!user) {
            throw new HttpException('User not found', HttpStatus.UNAUTHORIZED);
        }

        // Check if user has one of the required roles
        const hasRole = requiredRoles.some((role) => user.user_type === role);

        if (!hasRole) {
            throw new HttpException(
                { message: 'Access denied. Insufficient permissions.' },
                HttpStatus.FORBIDDEN
            );
        }

        return true;
    }
}
