package com.airlock.iam.saml2.domain.model.sp.step;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.api.domain.model.user.ProvidedUsername;
import com.airlock.iam.saml2.domain.model.sp.Saml2Attributes;
import com.airlock.iam.saml2.domain.model.sp.Saml2SpAssertionAttributes;
import com.airlock.iam.saml2.domain.model.sp.Saml2SpEntityId;

public final class Saml2SpAssertionAttributesMapificationUtil {
   private static final String ATTRIBUTES_KEY = "attr";
   private static final String SP_ENTITY_ID_KEY = "entityId";
   private static final String PROVIDED_USER_ID_KEY = "userId";

   public static MapifiedValues mapifySaml2SpAssertionAttributes(Saml2SpAssertionAttributes attributes) {
      return MapifiedValuesBuilder.mapifiedValues()
         .put("entityId", attributes.spEntityId().value())
         .put("userId", attributes.providedUserIdFromNameID().getValue())
         .put("attr", attributes.attributes().getMap())
         .build();
   }

   public static Saml2SpAssertionAttributes demapifySaml2SpAssertionAttributes(MapifiedValues values) {
      return new Saml2SpAssertionAttributes(
         Saml2SpEntityId.spEntityId(values.get("entityId")), ProvidedUsername.providedUsernameOf(values.get("userId")), new Saml2Attributes(values.get("attr"))
      );
   }
}
