package de.assecutor.votianlt.service;

import java.util.Collections;
import java.util.List;

/**
 * Wird geworfen, wenn eine Rechnung beim Festschreiben gegen Pflichtangaben
 * nach § 14 UStG bzw. interne Konsistenzregeln verstößt. Die Verstöße werden
 * gesammelt geliefert, damit der Anwender alle Korrekturen in einem Schritt
 * durchführen kann statt jeden Fehler einzeln zu beheben.
 */
public class InvoiceComplianceException extends InvoiceLifecycleException {

    private final List<String> violations;

    public InvoiceComplianceException(List<String> violations) {
        super(buildMessage(violations));
        this.violations = List.copyOf(violations);
    }

    public List<String> getViolations() {
        return Collections.unmodifiableList(violations);
    }

    private static String buildMessage(List<String> violations) {
        if (violations == null || violations.isEmpty()) {
            return "Die Rechnung erfüllt die gesetzlichen Pflichtangaben nicht.";
        }
        StringBuilder sb = new StringBuilder("Die Rechnung kann nicht festgeschrieben werden — folgende Pflichtangaben fehlen oder sind inkonsistent:");
        for (String violation : violations) {
            sb.append("\n  • ").append(violation);
        }
        return sb.toString();
    }
}
