package com.airlock.iam.flow.shared.domain.model.session;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapificationUtils;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.api.domain.model.authmethod.AuthenticationMethod;
import com.airlock.iam.core.misc.impl.authen.AuthenticationMethodFactory;
import com.airlock.iam.core.misc.impl.authen.CombinedAuthenticationMethod;
import java.util.Collection;
import java.util.List;

public final class AuthenticationMethodMapificationUtils {
   private static final String ID_KEY = "id";

   public static List<Object> mapifyAuthenticationMethods(Collection<AuthenticationMethod> methods) {
      return MapificationUtils.mapifyCollection(methods, AuthenticationMethodMapificationUtils::mapifyAuthenticationMethod);
   }

   private static MapifiedValues mapifyAuthenticationMethod(AuthenticationMethod method) {
      if (method instanceof CombinedAuthenticationMethod) {
         throw new UnsupportedOperationException();
      } else {
         return MapifiedValuesBuilder.mapifiedValues().put("id", method.getId()).build();
      }
   }

   public static AuthenticationMethod demapifyAuthenticationMethod(MapifiedValues values) {
      return AuthenticationMethodFactory.authMethodFor(values.get("id"));
   }
}
