package com.airlock.iam.flow.shared.infrastructure.session;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.api.domain.model.user.ProvidedUsername;
import com.airlock.iam.common.api.domain.model.user.RepresenterId;
import com.airlock.iam.common.api.domain.model.user.UserIdentity;

public final class UserIdentityMapifier {
   private static final String USER_ID_KEY = "id";
   private static final String PROVIDED_NAME_KEY = "provided";
   private static final String REPRESENTER_KEY = "representer";

   public static MapifiedValues mapifyUserIdentity(UserIdentity identity) {
      return MapifiedValuesBuilder.mapifiedValues()
         .put("id", identity.id().getValue())
         .put("provided", identity.providedUsername().getValue())
         .putIfPresent("representer", identity.representerId().map(RepresenterId::value))
         .build();
   }

   public static UserIdentity demapifyUserIdentity(MapifiedValues values) {
      return new UserIdentity(
         values.simpleValue("id", UserId::userId),
         values.simpleValue("provided", ProvidedUsername::providedUsernameOf),
         values.transformOptional("representer", RepresenterId::new)
      );
   }
}
