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

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.factor.domain.model.airlock2fa.qrcode.Airlock2FAQrCodeUrl;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

public final class Airlock2FAUrlConverterService {
   private final String backEndBaseUrl;
   private final String frontEndBaseUrl;

   public Airlock2FAQrCodeUrl convertToFrontEnd(Airlock2FAQrCodeUrl backendUrl) {
      if (this.backEndBaseUrl.equals(this.frontEndBaseUrl)) {
         return backendUrl;
      }

      String backendActivationCodeUrl = backendUrl.getUrl().toString();
      if (!backendActivationCodeUrl.startsWith(this.backEndBaseUrl)) {
         throw new FailureException("Cannot replace backend url in activation code url. Backend url not found in activation code url.");
      }

      String frontendActivationCodeUrl = backendActivationCodeUrl.replaceFirst(this.backEndBaseUrl, this.frontEndBaseUrl);
      return new Airlock2FAQrCodeUrl(frontendActivationCodeUrl);
   }

   @SuppressFBWarnings(justification = "generated code")
   Airlock2FAUrlConverterService(String backEndBaseUrl, String frontEndBaseUrl) {
      this.backEndBaseUrl = backEndBaseUrl;
      this.frontEndBaseUrl = frontEndBaseUrl;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public static class Airlock2FAUrlConverterServiceBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String backEndBaseUrl;
      @SuppressFBWarnings(justification = "generated code")
      private String frontEndBaseUrl;

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

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAUrlConverterService.Airlock2FAUrlConverterServiceBuilder backEndBaseUrl(String backEndBaseUrl) {
         this.backEndBaseUrl = backEndBaseUrl;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAUrlConverterService.Airlock2FAUrlConverterServiceBuilder frontEndBaseUrl(String frontEndBaseUrl) {
         this.frontEndBaseUrl = frontEndBaseUrl;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAUrlConverterService build() {
         return new Airlock2FAUrlConverterService(this.backEndBaseUrl, this.frontEndBaseUrl);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "Airlock2FAUrlConverterService.Airlock2FAUrlConverterServiceBuilder(backEndBaseUrl="
            + this.backEndBaseUrl
            + ", frontEndBaseUrl="
            + this.frontEndBaseUrl
            + ")";
      }
   }
}
