package com.airlock.iam.common.domain.service.exception;

import com.airlock.iam.base.api.domain.model.exception.ViolationException;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.annotation.Nullable;
import java.util.Optional;

public class FeatureDisabledException extends ViolationException {
   @Nullable
   private final String userId;

   public FeatureDisabledException(String message) {
      this(null, message);
   }

   public FeatureDisabledException(String userId, String message) {
      super(message);
      this.userId = userId;
   }

   public static void checkTrue(boolean condition, String userId, String message) {
      if (!condition) {
         throw new FeatureDisabledException(userId, message);
      }
   }

   @SuppressFBWarnings(value = "HSM_HIDING_METHOD", justification = "Never used on an instance, always with fully qualified reference.")
   public static void checkTrue(boolean condition, String message) {
      if (!condition) {
         throw new FeatureDisabledException(message);
      }
   }

   public static <T> T checkOptionalPresent(Optional<T> optional, String message) {
      if (!optional.isPresent()) {
         throw new FeatureDisabledException(message);
      } else {
         return optional.get();
      }
   }

   @Nullable
   @SuppressFBWarnings(justification = "generated code")
   public String getUserId() {
      return this.userId;
   }
}
