import { applyDecorators, UseGuards, SetMetadata } from '@nestjs/common';
import { LogtoTokenGuard } from './guard';

type LogtoProtectedOptions<T> = Partial<{
  requiredScopes: string[],
  requiredRoles: (T | 'management-point3')[]
}>

export function LogtoProtected<RoleType>(options?: LogtoProtectedOptions<RoleType>): ReturnType<typeof applyDecorators> {
  const { requiredScopes, requiredRoles } = options ?? {};
  return applyDecorators(
    UseGuards(LogtoTokenGuard),
    SetMetadata('requiredScopes', requiredScopes && requiredScopes.length > 0 ? requiredScopes : undefined),
    SetMetadata('requiredRoles', requiredRoles && requiredRoles.length > 0 ? requiredRoles : undefined),
  );
}
