from pathlib import Path
import fitz, json, re, shutil, hashlib
src=Path('/home/spazio/.hermes/cache/documents/doc_26d3912a6402_vne_konteksta.pdf')
base=Path('/home/spazio/vne_konteksta_book')
for d in ['source','text','fragments','outputs']:
    (base/d).mkdir(parents=True,exist_ok=True)
dst=base/'source'/'Сергей Лысов - Вне контекста.pdf'
shutil.copy2(src,dst)
doc=fitz.open(src)
pages=[p.get_text('text').replace('\r','').strip() for p in doc]
full='\n\n'.join(f'===== СТРАНИЦА {i} =====\n\n{t}' for i,t in enumerate(pages,1))+'\n'
(base/'text'/'full_text.txt').write_text(full,encoding='utf-8')
starts=[]
for i,t in enumerate(pages,1):
    m=re.search(r'Глава\s+(\d+)\.\s*([^\n]+(?:\n(?!Глава)[^\n]+)?)',t)
    if m:
        starts.append((i,int(m.group(1)),' '.join(m.group(2).split())))
frags=[]
for k,(start,num,title) in enumerate(starts):
    end=(starts[k+1][0]-1) if k+1<len(starts) else len(pages)
    text='\n\n'.join(f'===== СТРАНИЦА {i} =====\n\n{pages[i-1]}' for i in range(start,end+1))+'\n'
    fp=base/'fragments'/f'chapter_{num:02d}.txt'
    fp.write_text(text,encoding='utf-8')
    frags.append({'number':num,'title':f'Глава {num}. {title}','start_page':start,'end_page':end,'file':fp.name,'chars':len(text)})
manifest={'book':'Сергей Лысов — Вне контекста','subtitle':'Третья сигнальная система','source':str(dst),'full_text':str(base/'text'/'full_text.txt'),'pages':len(pages),'fragments':frags,'total_fragments':len(frags),'sha256':hashlib.sha256(dst.read_bytes()).hexdigest()}
(base/'manifest.json').write_text(json.dumps(manifest,ensure_ascii=False,indent=2),encoding='utf-8')
(base/'state.json').write_text(json.dumps({'next_fragment':2,'first_fragment_delivered':True},ensure_ascii=False,indent=2),encoding='utf-8')
(base/'README.md').write_text('# Сергей Лысов — «Вне контекста»\n\nПолный текст и подробные разборы раз в пять дней. Первый разбор — глава 1.\n',encoding='utf-8')
(base/'BOOK_INSIGHTS.md').write_text('# «Вне контекста» — накопительная карта идей\n\nЗдесь накапливаются подробные разборы по главам.\n',encoding='utf-8')
print(json.dumps({'pages':len(pages),'fragments':frags,'sha256':manifest['sha256'],'full_chars':len(full)},ensure_ascii=False))
