import json,csv,sys
from pathlib import Path
from decimal import Decimal
root=Path(__file__).resolve().parent
expected=json.loads((root/'expected.json').read_text())
assert (root/'source.pdf').read_bytes().startswith(b'%PDF')
if 'expected_heading_order' in expected:
    text=Path(sys.argv[1]).read_text() if len(sys.argv)>1 else (root/'result.md').read_text()
    for field in ('expected_heading_order','expected_paragraph_order'):
        indices=[text.index(s) for s in expected[field]]
        assert indices==sorted(indices),field+' order wrong'
elif 'rows' in expected:
    rows=list(csv.reader(open(sys.argv[1] if len(sys.argv)>1 else root/'table-1.csv',newline='')))
    assert rows[0]==expected['headers'],rows[0]
    assert rows[1:]==expected['rows'],rows[1:]
    assert str(sum(Decimal(r[1])*Decimal(r[2]) for r in rows[1:]))==expected['expected_total']
else:
    chunks=json.loads(Path(sys.argv[1]).read_text() if len(sys.argv)>1 else (root/'chunks.json').read_text())
    text=' '.join(c['text'] for c in chunks)
    for s in expected['expected_texts']:assert s in text,s
    for c in chunks:
        assert c['source']=='source.pdf'
        assert c['refs'], 'missing document refs'
print('Actual output coverage/order contract PASS; layout still needs manual review')
