#!/usr/bin/env python3
import json,hashlib,sys,datetime
from pathlib import Path
P='gacmai_20260718_091744';O='406ae3870eb00c1cbe063f3ab0ca66ccb74c2b2b7c1efc635b16638f6208abd2'
if len(sys.argv)!=5:raise SystemExit('usage: assemble_story.py B1 B2 B3 OUT')
files=list(map(Path,sys.argv[1:4]));out=Path(sys.argv[4]);parts=[]
for f in files:
 d=json.loads(f.read_text());assert d['project_id']==P and d['title']=='Bàn Số Bốn' and d['source_outline_sha256']==O
 parts.extend(d['parts'])
assert [x['part'] for x in parts]==list(range(1,13))
paras=[]
for x in parts:
 assert len(x['paragraphs'])==12;paras.extend(x['paragraphs'])
assert [q['ordinal'] for q in paras]==list(range(1,145))
d={'project_id':P,'title':'Bàn Số Bốn','source_outline_sha256':O,'cast':['Nguyễn Hoài Lan','Lê Thu Hạnh','Vũ Minh Thư','Trần Minh Quang','Phạm Quốc Dũng','Đỗ Văn Phúc'],'sole_pov':'Nguyễn Hoài Lan','parts':parts,'batch_provenance':[{'path':str(f),'sha256':hashlib.sha256(f.read_bytes()).hexdigest()} for f in files],'assembled_at':datetime.datetime.now(datetime.timezone.utc).isoformat()};out.write_text(json.dumps(d,ensure_ascii=False,indent=2)+'\n');print(json.dumps({'status':'assembled','sha256':hashlib.sha256(out.read_bytes()).hexdigest(),'paragraphs':144}))
if __name__=='__main__':pass
