#!/usr/bin/env python3
from pathlib import Path
import importlib.util,json,re,sys
P=Path(__file__).resolve().parents[1]
V=Path('/home/hermes/.hermes/skills/video-creation/sticker-man-video/scripts/validate_narration_manifest.py')
spec=importlib.util.spec_from_file_location('canonical_manifest',V);m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m)
def split(text):
 ends=list(re.finditer(r'[.!?…]+(?:["\'”’»)]*)?(?=\s|$)',text));out=[];start=0
 for z in ends:
  candidate=text[start:z.end()].strip()
  if candidate and m.sentence_count(candidate)==1:
   out.append(candidate);start=z.end()
 tail=text[start:].strip()
 if tail:out.append(tail)
 assert all(m.sentence_count(x)==1 for x in out),[(x,m.sentence_count(x)) for x in out]
 assert m.normalize(' '.join(out))==m.normalize(text)
 return out
script=Path(sys.argv[1]).resolve();sentences=split(script.read_text());items=[]
for i in range(0,len(sentences),2):
 text=' '.join(sentences[i:i+2]);n=len(items)+1;assert 1<=m.sentence_count(text)<=2
 items.append({'id':n,'text':text,'audio_path':str(P/f'audio/chunks/narration_{n:03d}.wav'),'asr_path':str(P/f'asr/narration_{n:03d}.json')})
out={'version':1,'language':'vi','items':items};dst=P/'narration/narration.json';dst.write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');print(dst,len(items))
