import base64, io, json, sqlite3, zipfile
from pathlib import Path
from jarvis_finance.storage.migrations import apply_migrations, get_schema_version
from jarvis_finance.services.postfinance_service import confirm_known_cash_projection_correction, preview_postfinance_import
BASE=Path('/home/agent/jarvis_runtime/finance-system/quarantine/2026-08-26-current-import')
SOURCE='/home/agent/jarvis_runtime/finance-system/data/finance.sqlite3';CLONE=BASE/'candidate-schema51-preview.sqlite3'
CLONE.unlink(missing_ok=True)
src=sqlite3.connect(f'file:{SOURCE}?mode=ro',uri=True);dst=sqlite3.connect(CLONE);src.backup(dst);src.close();dst.row_factory=sqlite3.Row
apply_migrations(dst)
correction=confirm_known_cash_projection_correction(dst,confirm=True);replay=confirm_known_cash_projection_correction(dst,confirm=True)
statement=BASE/'260826_Postfinance_Kontoauszug.pdf';overview=BASE/'260826_Postfinance aktueller Stand.pdf';buf=io.BytesIO()
with zipfile.ZipFile(buf,'w',zipfile.ZIP_DEFLATED) as archive:archive.writestr(statement.name,statement.read_bytes())
z=buf.getvalue();o=overview.read_bytes()
preview=preview_postfinance_import(dst,{'zip_file_name':'PostFinance_20260826.zip','overview_file_name':overview.name,'zip_mime_type':'application/zip','overview_mime_type':'application/pdf','zip_content_base64':base64.b64encode(z).decode(),'overview_content_base64':base64.b64encode(o).decode(),'zip_size_bytes':len(z),'overview_size_bytes':len(o)})
print(json.dumps({'schema':get_schema_version(dst),'correction':{k:correction.get(k) for k in ('corrected_rows','idempotent')},'correction_replay':{k:replay.get(k) for k in ('corrected_rows','idempotent')},'confirm_allowed':preview['confirm_allowed'],'import_blockers':preview['blocker_codes'],'performance_available':preview['performance_available'],'performance_blockers':preview['performance_blocker_codes'],'total_chf':preview['total_chf'],'reconciliation':preview['reconciliation_status']},indent=2))
dst.close()
