package hr.com.port.ips.eracun.validation;

import org.w3c.dom.Document;
import java.util.ArrayList;
import java.util.List;

public final class InvoiceBusinessValidator {
    private final List<BusinessRule> rules = new ArrayList<BusinessRule>();

    public InvoiceBusinessValidator() { }

    public void register(BusinessRule rule) {
        rules.add(rule);
    }

    public ValidationReport validate(byte[] xmlBytes) {
    try {
        XmlUtils.ParseResult pr = XmlUtils.parse(xmlBytes);
        return validate(pr.doc);
    } catch (Exception ex) {
        List<RuleResult> results = new ArrayList<>();
        // Poruka sada uključuje encoding (BOM/declared), line/col i/ili offset prvog lošeg bajta
        results.add(new RuleResult("VALIDATOR", false, "Greška pri parsiranju XML-a: " + ex.getMessage()));
        return new ValidationReport(false, results);
    }
}

    public ValidationReport validate(Document doc) {
        List<RuleResult> results = new ArrayList<>();
        boolean ok = true;
        for (BusinessRule r : rules) {
            RuleResult rr = r.validate(doc);
            results.add(rr);
            if (!rr.isPassed()) ok = false;
        }
        return new ValidationReport(ok, results);
    }
}
