package com.airlock.iam.base.domain.model.mapification;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.api.domain.model.validation.ValidationResult;
import com.airlock.iam.base.api.domain.model.validation.ValidatorError;
import java.util.List;

public class ValidationResultMapifier {
   private static final String VALID_KEY = "valid";
   private static final String ERRORS_KEY = "errors";

   public static MapifiedValues mapifyValidationResult(ValidationResult result) {
      return MapifiedValuesBuilder.mapifiedValues()
         .put("valid", result.isValid())
         .putIfNotEmpty("errors", MapificationUtils.mapifyCollection(result.getErrors(), ValidatorErrorMapifier::mapifyValidatorError))
         .build();
   }

   public static ValidationResult demapifyValidationResult(MapifiedValues values) {
      boolean valid = values.<Boolean>get("valid");
      if (valid) {
         return ValidationResult.valid();
      }

      List<ValidatorError> errors = values.demapifyList("errors", ValidatorErrorMapifier::demapifyValidatorError);
      return ValidationResult.invalid(errors);
   }
}
