#!/usr/bin/env python3
import json, re, time, uuid, urllib.request
from pathlib import Path
PROJECT = Path('/data/video-pipeline/Channel-Loi-Co-Nhan/project/211-Dung-de-mot-bat-com-hon-lam-lanh-ca-mai-nha')
TTS_URL='http://192.168.40.32:7861/voice/truong-giang'
TTS_STYLE='doc_truyen'

def multipart(fields):
    boundary='----TruongGiangVoiceBoundary'+uuid.uuid4().hex
    chunks=[]
    for k,v in fields.items():
        chunks.append(f'--{boundary}\r\nContent-Disposition: form-data; name="{k}"\r\n\r\n{v}\r\n'.encode())
    chunks.append(f'--{boundary}--\r\n'.encode())
    return boundary,b''.join(chunks)

def main():
    data=json.loads((PROJECT/'script/scenes.json').read_text(encoding='utf-8'))
    text=data.get('metadata',{}).get('topic_sentence') or data.get('title','').split('|')[0].strip()
    text=re.sub(r'\s*[:;\-–—]\s*', ', ', text).strip()
    out=PROJECT/'output/intro/intro_audio.wav'
    out.parent.mkdir(parents=True,exist_ok=True)
    boundary,body=multipart({'text':text,'style':TTS_STYLE})
    req=urllib.request.Request(TTS_URL,data=body,headers={'Content-Type':'multipart/form-data; boundary='+boundary},method='POST')
    with urllib.request.urlopen(req,timeout=180) as r:
        blob=r.read()
    if not (blob[:4]==b'RIFF' and b'WAVE' in blob[:12]):
        raise RuntimeError(blob[:120])
    out.write_bytes(blob)
    (PROJECT/'output/intro/intro_text.txt').write_text(text,encoding='utf-8')
    print('DONE intro_audio', out, len(blob))
if __name__=='__main__': main()
