#!/usr/bin/env python3
import argparse, json
from pathlib import Path
BASE=Path('/home/spazio/vne_konteksta_book')
parser=argparse.ArgumentParser(); parser.add_argument('--peek',action='store_true'); args=parser.parse_args()
manifest=json.loads((BASE/'manifest.json').read_text(encoding='utf-8'))
state=json.loads((BASE/'state.json').read_text(encoding='utf-8'))
n=int(state.get('next_fragment',2))
if n>manifest['total_fragments']:
    print(json.dumps({'status':'complete','book':manifest['book'],'total_fragments':manifest['total_fragments']},ensure_ascii=False)); raise SystemExit
item=manifest['fragments'][n-1]
text=(BASE/'fragments'/item['file']).read_text(encoding='utf-8')
out={'status':'ok','book':manifest['book'],'subtitle':manifest['subtitle'],'fragment_number':n,'total_fragments':manifest['total_fragments'],'chapter':item['title'],'source_pages':f"{item['start_page']}–{item['end_page']}",'source_file':str(BASE/'source'/'Сергей Лысов - Вне контекста.pdf'),'accumulating_file':str(BASE/'BOOK_INSIGHTS.md'),'daily_output_dir':str(BASE/'outputs'),'fragment_text':text}
print(json.dumps(out,ensure_ascii=False))
# The collector is intentionally read-only. The cron agent advances state.json
# only after the analysis has been written successfully, so a blocked/failed run
# cannot silently skip a chapter.
