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

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

public final class MtanTokenDeletionDescription implements ChangeDescriptionFlowAttribute<MtanTokenDeletionDescription> {
   private static final String SELECTED_TOKEN_KEY = "id";
   private final SelectedMtanToken tokenToBeDeleted;

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

   @Override
   public String description() {
      return "mTAN Number Deletion";
   }

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

   public static MtanTokenDeletionDescription demapify(MapifiedValues values) {
      return new MtanTokenDeletionDescription(values.demapifyValue("id", SelectedMtanToken::demapify));
   }

   @SuppressFBWarnings(justification = "generated code")
   public SelectedMtanToken getTokenToBeDeleted() {
      return this.tokenToBeDeleted;
   }

   @SuppressFBWarnings(justification = "generated code")
   public MtanTokenDeletionDescription(SelectedMtanToken tokenToBeDeleted) {
      this.tokenToBeDeleted = tokenToBeDeleted;
   }
}
