package com.airlock.iam.common.domain.model.otp;

import com.google.common.base.Preconditions;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Arrays;
import java.util.Date;

public final class OneTimePasswordVerificationContext {
   private final byte[] hash;
   private final Date expirationTime;

   public OneTimePasswordVerificationContext(byte[] hash, Date expirationTime) {
      Preconditions.checkArgument(hash != null && hash.length > 0);
      this.hash = Arrays.copyOf(hash, hash.length);
      this.expirationTime = expirationTime;
   }

   public boolean isExpiredAt(Date time) {
      Preconditions.checkNotNull(time);
      return !this.expirationTime.after(time);
   }

   @SuppressFBWarnings(justification = "generated code")
   public static OneTimePasswordVerificationContext.OneTimePasswordVerificationContextBuilder builder() {
      return new OneTimePasswordVerificationContext.OneTimePasswordVerificationContextBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public byte[] getHash() {
      return this.hash;
   }

   @SuppressFBWarnings(justification = "generated code")
   public Date getExpirationTime() {
      return this.expirationTime;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public boolean equals(Object o) {
      if (o == this) {
         return true;
      } else if (!(o instanceof OneTimePasswordVerificationContext other)) {
         return false;
      } else {
         if (!Arrays.equals(this.hash, other.hash)) {
            return false;
         }

         Object this$expirationTime = this.expirationTime;
         Object other$expirationTime = other.expirationTime;
         return this$expirationTime == null ? other$expirationTime == null : this$expirationTime.equals(other$expirationTime);
      }
   }

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

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String toString() {
      return "OneTimePasswordVerificationContext(hash=" + Arrays.toString(this.getHash()) + ", expirationTime=" + this.getExpirationTime() + ")";
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class OneTimePasswordVerificationContextBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private byte[] hash;
      @SuppressFBWarnings(justification = "generated code")
      private Date expirationTime;

      @SuppressFBWarnings(justification = "generated code")
      OneTimePasswordVerificationContextBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public OneTimePasswordVerificationContext.OneTimePasswordVerificationContextBuilder hash(byte[] hash) {
         this.hash = hash;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public OneTimePasswordVerificationContext.OneTimePasswordVerificationContextBuilder expirationTime(Date expirationTime) {
         this.expirationTime = expirationTime;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public OneTimePasswordVerificationContext build() {
         return new OneTimePasswordVerificationContext(this.hash, this.expirationTime);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "OneTimePasswordVerificationContext.OneTimePasswordVerificationContextBuilder(hash="
            + Arrays.toString(this.hash)
            + ", expirationTime="
            + this.expirationTime
            + ")";
      }
   }
}
