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

import com.airlock.iam.oauth2.application.configuration.ClaimRequestConfig;
import com.airlock.iam.oauth2.domain.model.client.communication.ClaimRequestSettings;
import java.util.List;
import java.util.stream.Collectors;

public final class ClaimRequestSettingsFactory {
   private ClaimRequestSettingsFactory() {
   }

   public static List<ClaimRequestSettings> mapClaimRequestSettings(List<ClaimRequestConfig> claimRequest) {
      return claimRequest.stream().map(ClaimRequestSettingsFactory::mapClaimRequestSettings).collect(Collectors.toList());
   }

   private static ClaimRequestSettings mapClaimRequestSettings(ClaimRequestConfig claimRequestConfig) {
      return ClaimRequestSettings.builder()
         .claim(claimRequestConfig.getClaim())
         .values(claimRequestConfig.getValues())
         .requirement(mapRequirement(claimRequestConfig))
         .topLevelMember(mapTopLevelMember(claimRequestConfig))
         .build();
   }

   private static ClaimRequestSettings.ClaimRequestMember mapTopLevelMember(ClaimRequestConfig claimRequestConfig) {
      return ClaimRequestSettings.ClaimRequestMember.valueOf(claimRequestConfig.getTopLevelMember().name());
   }

   private static ClaimRequestSettings.ClaimRequestRequirement mapRequirement(ClaimRequestConfig claimRequestConfig) {
      return ClaimRequestSettings.ClaimRequestRequirement.valueOf(claimRequestConfig.getRequirement().name());
   }
}
