package com.airlock.iam.common.api.domain.model.exception;

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.net.URI;
import lombok.NonNull;
import org.apache.commons.lang3.Strings;

public class ExternalServiceUnavailableException extends FailureException {
   private final URI serviceUri;

   public ExternalServiceUnavailableException(String message, @NonNull URI serviceUri) {
      super(message);
      if (serviceUri == null) {
         throw new NullPointerException("serviceUri is marked non-null but is null");
      }

      this.serviceUri = serviceUri;
   }

   public ExternalServiceUnavailableException(String message, @NonNull URI serviceUri, Throwable cause) {
      super(message, cause);
      if (serviceUri == null) {
         throw new NullPointerException("serviceUri is marked non-null but is null");
      }

      this.serviceUri = serviceUri;
   }

   public String getLogSafeUri() {
      return Strings.CS.removeStart(Strings.CS.removeEnd(Strings.CS.removeEnd(this.serviceUri.toASCIIString(), this.serviceUri.getPath()), "/"), "//");
   }

   @SuppressFBWarnings(justification = "generated code")
   public URI getServiceUri() {
      return this.serviceUri;
   }
}
