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

import com.airlock.iam.factor.domain.model.airlock2fa.qrcode.Airlock2FAQrCodeImage;
import com.airlock.iam.factor.domain.model.airlock2fa.qrcode.Airlock2FAQrCodeUrl;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;

public interface DeferredAuthenticationAnswer {
   Airlock2FASessionId getSessionId();

   final class MobileOnlyDeferredAuthenticationAnswer implements DeferredAuthenticationAnswer {
      private final Airlock2FASessionId sessionId;
      private final Airlock2FAMobileAuthUri mobileOnlyAuthUri;

      @SuppressFBWarnings(justification = "generated code")
      public MobileOnlyDeferredAuthenticationAnswer(Airlock2FASessionId sessionId, Airlock2FAMobileAuthUri mobileOnlyAuthUri) {
         this.sessionId = sessionId;
         this.mobileOnlyAuthUri = mobileOnlyAuthUri;
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public Airlock2FASessionId getSessionId() {
         return this.sessionId;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileAuthUri getMobileOnlyAuthUri() {
         return this.mobileOnlyAuthUri;
      }

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

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DeferredAuthenticationAnswer.MobileOnlyDeferredAuthenticationAnswer(sessionId="
            + this.getSessionId()
            + ", mobileOnlyAuthUri="
            + this.getMobileOnlyAuthUri()
            + ")";
      }
   }

   final class OfflineQrCodeDeferredAuthenticationAnswer implements DeferredAuthenticationAnswer {
      private final Airlock2FASessionId sessionId;
      private final Airlock2FAQrCodeUrl qrCodeUrl;

      @SuppressFBWarnings(justification = "generated code")
      public OfflineQrCodeDeferredAuthenticationAnswer(Airlock2FASessionId sessionId, Airlock2FAQrCodeUrl qrCodeUrl) {
         this.sessionId = sessionId;
         this.qrCodeUrl = qrCodeUrl;
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public Airlock2FASessionId getSessionId() {
         return this.sessionId;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAQrCodeUrl getQrCodeUrl() {
         return this.qrCodeUrl;
      }

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

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DeferredAuthenticationAnswer.OfflineQrCodeDeferredAuthenticationAnswer(sessionId="
            + this.getSessionId()
            + ", qrCodeUrl="
            + this.getQrCodeUrl()
            + ")";
      }
   }

   final class OneTouchDeferredAuthenticationAnswer implements DeferredAuthenticationAnswer {
      private final Airlock2FASessionId sessionId;
      private final Optional<Airlock2FAMultiNumberedChallenge> multiNumberedChallenge;

      @SuppressFBWarnings(justification = "generated code")
      public OneTouchDeferredAuthenticationAnswer(Airlock2FASessionId sessionId, Optional<Airlock2FAMultiNumberedChallenge> multiNumberedChallenge) {
         this.sessionId = sessionId;
         this.multiNumberedChallenge = multiNumberedChallenge;
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public Airlock2FASessionId getSessionId() {
         return this.sessionId;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Optional<Airlock2FAMultiNumberedChallenge> getMultiNumberedChallenge() {
         return this.multiNumberedChallenge;
      }

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

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DeferredAuthenticationAnswer.OneTouchDeferredAuthenticationAnswer(sessionId="
            + this.getSessionId()
            + ", multiNumberedChallenge="
            + this.getMultiNumberedChallenge()
            + ")";
      }
   }

   final class OnlineQrCodeDeferredAuthenticationAnswer implements DeferredAuthenticationAnswer {
      private final Airlock2FASessionId sessionId;
      private final Airlock2FAMobileAuthUri mobileAuthUri;
      private final Airlock2FAMobileAuthUniversalLink mobileAuthUniversalLink;
      private final Airlock2FAQrCodeImage qrCodeImage;

      @SuppressFBWarnings(justification = "generated code")
      public OnlineQrCodeDeferredAuthenticationAnswer(
         Airlock2FASessionId sessionId,
         Airlock2FAMobileAuthUri mobileAuthUri,
         Airlock2FAMobileAuthUniversalLink mobileAuthUniversalLink,
         Airlock2FAQrCodeImage qrCodeImage
      ) {
         this.sessionId = sessionId;
         this.mobileAuthUri = mobileAuthUri;
         this.mobileAuthUniversalLink = mobileAuthUniversalLink;
         this.qrCodeImage = qrCodeImage;
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public Airlock2FASessionId getSessionId() {
         return this.sessionId;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileAuthUri getMobileAuthUri() {
         return this.mobileAuthUri;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileAuthUniversalLink getMobileAuthUniversalLink() {
         return this.mobileAuthUniversalLink;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAQrCodeImage getQrCodeImage() {
         return this.qrCodeImage;
      }

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

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DeferredAuthenticationAnswer.OnlineQrCodeDeferredAuthenticationAnswer(sessionId="
            + this.getSessionId()
            + ", mobileAuthUri="
            + this.getMobileAuthUri()
            + ", mobileAuthUniversalLink="
            + this.getMobileAuthUniversalLink()
            + ", qrCodeImage="
            + this.getQrCodeImage()
            + ")";
      }
   }

   final class UsernamelessQrCodeDeferredAuthenticationAnswer implements DeferredAuthenticationAnswer {
      private final Airlock2FASessionId sessionId;
      private final Airlock2FAQrCodeImage qrCodeImage;

      @SuppressFBWarnings(justification = "generated code")
      public UsernamelessQrCodeDeferredAuthenticationAnswer(Airlock2FASessionId sessionId, Airlock2FAQrCodeImage qrCodeImage) {
         this.sessionId = sessionId;
         this.qrCodeImage = qrCodeImage;
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public Airlock2FASessionId getSessionId() {
         return this.sessionId;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAQrCodeImage getQrCodeImage() {
         return this.qrCodeImage;
      }

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

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DeferredAuthenticationAnswer.UsernamelessQrCodeDeferredAuthenticationAnswer(sessionId="
            + this.getSessionId()
            + ", qrCodeImage="
            + this.getQrCodeImage()
            + ")";
      }
   }
}
