package com.airlock.iam.common.domain.model.validation;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.api.domain.model.validation.GenericError;
import com.airlock.iam.base.api.domain.model.validation.ValidationResult;
import com.airlock.iam.base.api.domain.model.validation.Validator;
import com.airlock.iam.base.api.domain.model.validation.ValidatorError;
import com.airlock.iam.base.api.domain.model.validation.info.RegexValidationInfo;
import com.airlock.iam.base.api.domain.model.validation.info.ValidationInfo;
import com.airlock.iam.common.application.configuration.validation.RegexStringValidatorConfig;
import jakarta.inject.Inject;
import java.util.List;
import java.util.Objects;

@LogicForConfig(RegexStringValidatorConfig.class)
public final class RegexStringValidator implements Validator<String> {
   private final RegexStringValidatorConfig config;

   @Inject
   public RegexStringValidator(RegexStringValidatorConfig config) {
      this.config = config;
   }

   public ValidationResult validate(String input) {
      Objects.requireNonNull(input);
      return this.config.getValidationPattern().matcher(input).matches()
         ? ValidationResult.valid()
         : ValidationResult.invalid(ValidatorError.validatorError(GenericError.WRONG_FORMAT));
   }

   @Override
   public List<ValidationInfo> getInfo() {
      return List.of(RegexValidationInfo.create(this.config.getValidationPattern()));
   }
}
