package com.airlock.iam.common.domain.model.user.profileitems;

import com.airlock.iam.base.api.domain.model.validation.GenericError;
import com.airlock.iam.base.api.domain.model.validation.ValidationResultType;
import jakarta.annotation.Nullable;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;

public interface UserProfileItemLogic {
   UserProfileItemLogic.CheckResult validate(Object var1, @Nullable Object var2, @Nullable String var3);

   Object formatForPersistence(Object var1);

   Object transformPersistentValue(Object var1);

   boolean isModifiable(Object var1);

   static boolean validationRequired(Object value, Object oldValue, boolean validateOnlyChangedValues) {
      return validateOnlyChangedValues && value != null && !StringUtils.isBlank(value.toString()) ? !Objects.equals(value, oldValue) : true;
   }

   enum CheckResult {
      IS_OK,
      REQUIRED,
      WRONG_FORMAT,
      INVALID_VALUE,
      OUTSIDE_RANGE,
      NOT_UNIQUE;

      public ValidationResultType convertToValidationResultType() {
         if (NOT_UNIQUE == this) {
            return GenericError.NOT_UNIQUE;
         } else if (OUTSIDE_RANGE == this) {
            return GenericError.OUTSIDE_RANGE;
         } else if (REQUIRED == this) {
            return GenericError.REQUIRED;
         } else {
            return WRONG_FORMAT == this ? GenericError.WRONG_FORMAT : GenericError.INVALID_VALUE;
         }
      }
   }
}
