package com.airlock.iam.factor.domain.model.fido;

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.factor.domain.model.fido.registration.FidoUserVerificationPreference;

public class FidoCredentialAuthenticationSettingsMapifier {
   private static final String AUTHENTICATION_TIMEOUT_KEY = "authTimeout";
   private static final String USER_VERIFICATION_KEY = "userVerification";
   private static final String TRANSPORTS_KEY = "transports";

   public static FidoCredentialAuthenticationSettings demapifyFidoCredentialAuthenticationSettings(MapifiedValues values) {
      return new FidoCredentialAuthenticationSettings(
         values.demapifyValue("authTimeout", v -> FidoTimeout.timeout(MapificationUtils.demapifyDuration(v))),
         MapificationUtils.demapifyEnumOfClass(values.get("userVerification"), FidoUserVerificationPreference.class),
         values.demapifySimpleSet("transports", v -> FidoTransport.fromString((String)v))
      );
   }

   public static MapifiedValues mapifyFidoCredentialAuthenticationSettings(FidoCredentialAuthenticationSettings settings) {
      return MapifiedValuesBuilder.mapifiedValues()
         .put("authTimeout", MapificationUtils.mapifyDuration(settings.authenticationTimeout().getDuration()))
         .put("userVerification", settings.userVerification().name())
         .put("transports", MapificationUtils.mapifyCollection(settings.transports(), FidoTransport::getValue))
         .build();
   }
}
