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

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.fido.api.domain.model.FidoCredentialId;
import com.airlock.iam.flow.shared.api.domain.model.session.ChangeDescriptionFlowAttribute;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

public final class SelectedFidoCredentialFlowAttribute implements ChangeDescriptionFlowAttribute<SelectedFidoCredentialFlowAttribute> {
   private static final String CREDENTIAL_ID_KEY = "credentialId";
   private final FidoCredentialId credentialId;

   public SelectedFidoCredentialFlowAttribute mergeWith(SelectedFidoCredentialFlowAttribute newAttribute) {
      return newAttribute;
   }

   @Override
   public String description() {
      return "Selected FIDO Credential";
   }

   @Override
   public MapifiedValues mapify() {
      return MapifiedValuesBuilder.mapifiedValues().put("credentialId", this.credentialId.asString()).build();
   }

   public static SelectedFidoCredentialFlowAttribute demapify(MapifiedValues values) {
      return new SelectedFidoCredentialFlowAttribute(FidoCredentialId.credentialId(values.get("credentialId")));
   }

   @SuppressFBWarnings(justification = "generated code")
   public FidoCredentialId getCredentialId() {
      return this.credentialId;
   }

   @SuppressFBWarnings(justification = "generated code")
   public SelectedFidoCredentialFlowAttribute(FidoCredentialId credentialId) {
      this.credentialId = credentialId;
   }
}
