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

import com.airlock.iam.ssi.application.configuration.SsiAttributeConfig;
import com.airlock.iam.ssi.application.configuration.SsiClaimConfig;
import com.airlock.iam.ssi.domain.model.step.IssuerId;
import com.airlock.iam.ssi.domain.model.step.SsiAttributeSettings;
import com.airlock.iam.ssi.domain.model.step.SsiClaimSettings;
import java.util.List;
import java.util.Optional;

final class SsiClaimSettingsHelper {
   private SsiClaimSettingsHelper() {
   }

   static SsiClaimSettings toClaimSettings(SsiClaimConfig claim) {
      List<IssuerId> trustedIssuers = claim.getTrustedIssuers().stream().map(IssuerId::new).toList();
      List<SsiAttributeSettings> attributeSettings = claim.getRequestedAttributes().stream().map(SsiClaimSettingsHelper::toAttributeSettings).toList();
      return new SsiClaimSettings(claim.getCredentialSchemaName(), trustedIssuers, attributeSettings);
   }

   private static SsiAttributeSettings toAttributeSettings(SsiAttributeConfig attribute) {
      return new SsiAttributeSettings(attribute.getName(), Optional.ofNullable(attribute.getProviderKey()).orElse(attribute.getName()));
   }
}
