package com.airlock.iam.oauth2.infrastructure.service;

import com.airlock.iam.oauth2.application.configuration.scopepolicy.ScopePolicyConfig;
import com.airlock.iam.oauth2.domain.service.scopepolicy.ScopePolicy;
import com.airlock.iam.oauth2.domain.service.scopepolicy.ScopePolicyAlwaysOverwriteScopes;
import com.airlock.iam.oauth2.domain.service.scopepolicy.ScopePolicyEmptyScopesAllowed;
import com.airlock.iam.oauth2.domain.service.scopepolicy.ScopePolicyEmptyScopesOverwritten;
import com.airlock.iam.oauth2.domain.service.scopepolicy.ScopePolicyScopesMandatory;

public final class ScopePolicyFactory {
   public static ScopePolicy getScopePolicy(ScopePolicyConfig scopePolicyConfig) {
      return switch (scopePolicyConfig) {
         case ALWAYS_OVERWRITE_SCOPES -> new ScopePolicyAlwaysOverwriteScopes();
         case EMPTY_SCOPES_ALLOWED -> new ScopePolicyEmptyScopesAllowed();
         case EMPTY_SCOPES_OVERWRITTEN -> new ScopePolicyEmptyScopesOverwritten();
         case SCOPES_MANDATORY -> new ScopePolicyScopesMandatory();
      };
   }

   private ScopePolicyFactory() {
   }
}
