#!/usr/bin/env python3
import argparse
import json
from datetime import datetime, timezone
from pathlib import Path

parser = argparse.ArgumentParser()
parser.add_argument('--peek', action='store_true')
args = parser.parse_args()

BASE = Path('/home/spazio/cosmos_money_book_extract')
MANIFEST = BASE / 'manifest.json'
STATE = BASE / 'state.json'

manifest = json.loads(MANIFEST.read_text(encoding='utf-8'))
state = json.loads(STATE.read_text(encoding='utf-8')) if STATE.exists() else {'next_fragment': 1, 'completed_fragments': []}
fragments = manifest['daily_fragments']
next_fragment = int(state.get('next_fragment', 1))

if next_fragment > len(fragments):
    print(json.dumps({
        'status': 'complete',
        'message': 'Все фрагменты книги уже разобраны. Сделай итоговую интеграционную выжимку по файлу инструментов.',
        'book': manifest['title'],
        'base_dir': str(BASE),
        'tools_file': str(BASE / 'TOOLS_AND_INSIGHTS.md'),
        'manifest_path': str(MANIFEST),
        'total_fragments': len(fragments),
    }, ensure_ascii=False, indent=2))
    raise SystemExit(0)

meta = fragments[next_fragment - 1]
text = Path(meta['path']).read_text(encoding='utf-8')

if not args.peek:
    state.setdefault('completed_fragments', [])
    state['current_fragment'] = next_fragment
    state['next_fragment'] = next_fragment + 1
    state['last_emitted_at_utc'] = datetime.now(timezone.utc).isoformat()
    STATE.write_text(json.dumps(state, ensure_ascii=False, indent=2), encoding='utf-8')

payload = {
    'status': 'ok',
    'task': 'daily_book_extract',
    'book': manifest['title'],
    'fragment_number': next_fragment,
    'total_fragments': len(fragments),
    'range': {'start_page': meta.get('start_page'), 'end_page': meta.get('end_page')},
    'base_dir': str(BASE),
    'tools_file': str(BASE / 'TOOLS_AND_INSIGHTS.md'),
    'daily_outputs_dir': str(BASE / 'daily_outputs'),
    'source_fragment_path': meta['path'],
    'instruction': 'Сделай ежедневную подробную выжимку на русском для Margarita / Cosmos Luminosity. Не цитируй длинные фрагменты, извлекай инструменты, техники, практики, вопросы, важные мысли и осознания. После ответа дополни tools_file новым разделом по этому фрагменту.',
    'fragment_text': text,
}
print(json.dumps(payload, ensure_ascii=False, indent=2))
