package com.airlock.iam.techclientreg.domain.model.registration;

import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import jakarta.inject.Inject;
import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;

final class ClientMetadataAttributeValidator {
   private static final ELogger LOG = ELoggerFactory.getLogger(ClientMetadataAttributeValidator.class);

   @Inject
   public ClientMetadataAttributeValidator() {
   }

   boolean isValidMetadataAttribute(String description, String requestedValue, int maxLength, Pattern pattern) {
      return this.isValidMetadataAttribute(description, requestedValue, maxLength, v -> pattern.matcher(v).matches());
   }

   boolean isValidMetadataAttribute(String description, String requestedValue, int maxLength, List<String> allowedValues) {
      return this.isValidMetadataAttribute(description, requestedValue, maxLength, allowedValues::contains);
   }

   boolean isValidMetadataAttribute(String description, String requestedValue, int maxLength, Predicate<String> isValid) {
      if (requestedValue.length() > maxLength) {
         LOG.info(description + " value received from the client exceeds length limit: " + LogUtil.logSafeString(requestedValue));
         return false;
      } else if (!isValid.test(requestedValue)) {
         LOG.info("Invalid " + description + " value received form the client: " + LogUtil.logSafeString(requestedValue));
         return false;
      } else {
         return true;
      }
   }
}
