package com.airlock.iam.oauth2.domain.service.scopepolicy;

import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.oauth2.api.domain.model.OAuth2Scope;
import com.airlock.iam.oauth2.domain.model.scopepolicy.ScopePolicyInput;
import java.util.List;

public final class ScopePolicyAlwaysOverwriteScopes implements ScopePolicy {
   private static final ELogger LOG = ELoggerFactory.getLogger(ScopePolicyAlwaysOverwriteScopes.class);

   @Override
   public boolean isValidRequestedScope(List<OAuth2Scope> requestedScopes) {
      return true;
   }

   @Override
   public List<OAuth2Scope> processScopes(ScopePolicyInput scopesToProcess) {
      List<OAuth2Scope> replacementScopes = scopesToProcess.allowedScopes().explicitlyAllowedScopes();
      LOG.debug(
         "Replacing requested scopes %s with %s"
            .formatted(ScopePolicy.toScopeString(scopesToProcess.requestedScopes()), ScopePolicy.toScopeString(replacementScopes))
      );
      return replacementScopes;
   }
}
