package de.assecutor.pdftool.zugferd;

import org.mustangproject.validator.ZUGFeRDValidator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * Validiert ZUGFeRD-Rechnungen (PDF oder XML) mit dem Mustang-Validator gegen
 * XSD-Schema und die EN16931-Schematron-Regeln sowie das PDF gegen PDF/A-3
 * (veraPDF). Liefert das Prüfergebnis samt XML-Prüfbericht.
 */
@Service
public class ZugferdValidationService {

    private static final Logger log = LoggerFactory.getLogger(ZugferdValidationService.class);

    public ValidationResult validate(byte[] content, String fileName) {
        try {
            // ZUGFeRDValidator hält Zustand pro Prüfung und ist nicht threadsicher,
            // daher pro Aufruf eine neue Instanz
            ZUGFeRDValidator validator = new ZUGFeRDValidator();
            String report = validator.validate(content, fileName);
            boolean valid = validator.wasCompletelyValid();
            if (!valid) {
                log.warn("ZUGFeRD-Validierung von {} fehlgeschlagen:\n{}", fileName, report);
            }
            return new ValidationResult(valid, report);
        } catch (RuntimeException e) {
            log.error("Validierung von {} nicht durchführbar", fileName, e);
            return new ValidationResult(false,
                    "<validation><error>Validierung nicht durchführbar: " + e.getMessage() + "</error></validation>");
        }
    }

    public record ValidationResult(boolean valid, String reportXml) {
    }
}
