"""
builder/validator.py — Sanity-check entries before building XML.
Catches unbalanced Dr/Cr and missing ledgers so bad data never reaches Tally.
"""


def validate_entries(entries: list) -> list:
    """Return a list of human-readable problems. Empty list == all good."""
    problems = []
    required = ("date", "voucher_type", "debit_ledger", "credit_ledger", "amount")

    for i, e in enumerate(entries, start=1):
        for field in required:
            if not e.get(field):
                problems.append(f"Entry {i}: missing '{field}'")

        try:
            amt = float(e.get("amount", 0))
            if amt == 0:
                problems.append(f"Entry {i}: amount is zero")
        except (TypeError, ValueError):
            problems.append(f"Entry {i}: amount '{e.get('amount')}' is not a number")

        if e.get("debit_ledger") and e.get("debit_ledger") == e.get("credit_ledger"):
            problems.append(f"Entry {i}: debit and credit ledger are the same")

    return problems


def is_valid(entries: list) -> bool:
    return len(validate_entries(entries)) == 0
