ValidationResult.java

package com.ctrlbuy.webshop.model;

import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

/**
 * Resultat från validering av betalningsinformation
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ValidationResult {
    private boolean valid;
    private List<String> errors;
    private List<String> warnings;
    private String errorCode;
    private String errorMessage;

    // Builder-kompatibel konstruktor
    public ValidationResult(boolean valid) {
        this();
        this.valid = valid;
    }

    // Säkerställ att listor inte är null
    public List<String> getErrors() {
        if (errors == null) {
            errors = new ArrayList<>();
        }
        return errors;
    }

    public List<String> getWarnings() {
        if (warnings == null) {
            warnings = new ArrayList<>();
        }
        return warnings;
    }

    // Utility methods
    public void addError(String error) {
        getErrors().add(error);
        this.valid = false;
    }

    public void addWarning(String warning) {
        getWarnings().add(warning);
    }

    public boolean hasErrors() {
        return getErrors() != null && !getErrors().isEmpty();
    }

    public boolean hasWarnings() {
        return getWarnings() != null && !getWarnings().isEmpty();
    }

    public String getFirstError() {
        List<String> errorList = getErrors();
        return errorList.isEmpty() ? null : errorList.get(0);
    }

    public static ValidationResult success() {
        return ValidationResult.builder()
                .valid(true)
                .errors(new ArrayList<>())
                .warnings(new ArrayList<>())
                .build();
    }

    public static ValidationResult failure(String error) {
        ValidationResult result = ValidationResult.builder()
                .valid(false)
                .errors(new ArrayList<>())
                .warnings(new ArrayList<>())
                .build();
        result.addError(error);
        return result;
    }
}