package com.airlock.iam.techclientreg.domain.model.flow;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.domain.service.mapification.Mapifier;
import com.airlock.iam.flow.api.domain.model.session.SingleFlowScopedFlowAttribute;
import com.airlock.iam.techclientreg.api.domain.model.request.RequestCredential;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

public final class RequestCredentialFlowAttribute implements SingleFlowScopedFlowAttribute<RequestCredentialFlowAttribute> {
   private static final String REQUEST_CREDENTIAL_KEY = "credential";
   private final RequestCredential credential;

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

   @Override
   public MapifiedValues mapify() {
      return MapifiedValuesBuilder.mapifiedValues().put("credential", Mapifier.getInstance().mapify(this.credential)).build();
   }

   public static RequestCredentialFlowAttribute demapify(MapifiedValues values) {
      return new RequestCredentialFlowAttribute(values.demapifyValue("credential", Mapifier.getInstance()::demapify));
   }

   @SuppressFBWarnings(justification = "generated code")
   public RequestCredentialFlowAttribute(RequestCredential credential) {
      this.credential = credential;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public boolean equals(Object o) {
      if (o == this) {
         return true;
      } else if (!(o instanceof RequestCredentialFlowAttribute other)) {
         return false;
      } else {
         Object this$credential = this.credential;
         Object other$credential = other.credential;
         return this$credential == null ? other$credential == null : this$credential.equals(other$credential);
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public int hashCode() {
      int PRIME = 59;
      int result = 1;
      Object $credential = this.credential;
      return result * 59 + ($credential == null ? 43 : $credential.hashCode());
   }

   @SuppressFBWarnings(justification = "generated code")
   public RequestCredential getCredential() {
      return this.credential;
   }
}
