#!/usr/bin/env python3
from pathlib import Path
import json, re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
pid='210-Biet-nhuong-mot-buoc-noi-cua-hep-duong-doi-tu-rong-them'
p=base/'project'/pid
topic='Biết nhường một bước nơi cửa hẹp, đường đời tự rộng thêm'
title=topic+' | Lời cổ nhân dạy'
for d in ['script','images/scenes','audio/voice_segments','subtitles','output/thumbnails','output/intro','logs']:
    (p/d).mkdir(parents=True,exist_ok=True)
scenes=[
('scene_001','Cổ nhân dạy, biết nhường một bước nơi cửa hẹp, đường đời tự rộng thêm. Người chỉ chăm chen lên trước thường tưởng mình nhanh, nhưng nhiều khi lại đánh rơi điều quý nhất là lòng người phía sau.','cửa ngõ hẹp trong làng cổ, hai người dừng lại nhường nhau'),
('scene_002','Ở phố chợ ven sông có người buôn vải tên Thành. Ông khéo tính, bán hàng giỏi, nhưng hễ gặp lối hẹp là muốn đi trước. Từ bến nước đến quầy chợ, ông ít khi chịu nhường ai. Ông nghĩ nhường là chậm, chậm là mất lời, nên chân thường nhanh hơn mắt nhìn người.','người buôn vải ôm cuộn vải đi qua phố chợ cổ đông người'),
('scene_003','Một sáng mùa mưa, Thành gánh vải qua cây cầu gỗ hẹp. Bên kia, một bà lão cũng đang chống gậy sang. Ông cau mặt, bảo mình đang vội phiên chợ, rồi bước lên trước.','cầu gỗ hẹp trên sông, người buôn vải đối diện bà lão'),
('scene_004','Bà lão lùi lại, nhưng tấm ván ướt trơn. Bà suýt ngã, giỏ rau rơi xuống nước. Thành vẫn kịp qua cầu, song tiếng thở dài của người đứng quanh đã theo ông vào tận quầy hàng.','giỏ rau rơi xuống sông, dân làng nhìn người buôn vải'),
('scene_005','Hôm ấy, vải của Thành đẹp mà khách thưa. Một cụ già chỉ nói nhỏ, người bán biết giữ đường cho người khác thì khách mới muốn mở đường đến mình. Câu ấy khiến ông bực, nhưng không quên được. Gió mưa ngoài hiên không lạnh bằng cảm giác bị người quen quay mặt.','quầy vải đẹp nhưng vắng khách trong chợ cổ'),
('scene_006','Chiều về, Thành gặp thầy đồ cũ dưới mái đình. Thầy không trách, chỉ đặt hai chiếc đũa vào một miệng chén hẹp. Cả hai cùng chen thì mắc lại, một chiếc lùi ra thì chiếc kia vào được.','thầy đồ đặt hai chiếc đũa bên chén trà trong đình làng'),
('scene_007','Thầy bảo, đường hẹp không làm người khổ bằng lòng hẹp. Nhường một bước không mất phần mình, chỉ là cho sự bình an có chỗ đi qua. Thành nghe, lần đầu thấy cái vội của mình thật nhỏ. Ông nhớ lại giỏ rau rơi, rồi thấy trong lòng mình còn hẹp hơn cây cầu.','người buôn vải lặng nghe thầy đồ dưới mái đình'),
('scene_008','Sáng sau, ông lại qua cầu. Thấy một đứa trẻ gánh nước run tay, Thành đứng nép sang bên, giữ hộ dây gánh rồi để nó đi trước. Cây cầu vẫn hẹp, mà lòng ông bỗng nhẹ. Ông còn nhặt giúp chiếc gáo rơi, việc nhỏ mà đứa trẻ nhớ mãi.','người buôn vải giúp đứa trẻ qua cầu gỗ hẹp'),
('scene_009','Tin nhỏ ấy lan trong chợ. Bà lão hôm trước mang giỏ rau mới đến, không nhắc chuyện cũ, chỉ mua một thước vải. Thành cúi đầu xin lỗi, lời nói chậm nhưng thật. Bà lão mỉm cười, như thể một thước vải không quý bằng một tấm lòng biết sửa.','bà lão mua vải, người buôn cúi đầu xin lỗi trong chợ'),
('scene_010','Từ đó, quầy vải của ông đông hơn. Không phải vì vải bỗng tốt hơn, mà vì khách thấy ở đó có một người biết dừng, biết đợi, biết để người yếu đi qua trước mình.','quầy vải ấm áp, khách chợ vui vẻ chọn vải'),
('scene_011','Thành cũng dạy con rằng khi gặp cửa hẹp, hãy nhìn xem ai cần qua trước. Người già, trẻ nhỏ, người đang gánh nặng, người đang buồn, đều đáng được một khoảng đường bình yên. Nhường cho họ không làm mình thấp đi, chỉ làm nếp nhà cao thêm.','người cha dạy con bên cửa nhà cổ và cuộn vải'),
('scene_012','Đời người có nhiều cửa hẹp hơn ta tưởng: một bữa cơm thiếu chỗ, một lời tranh phần, một lần chia lợi, một phút nóng lòng. Nếu ai cũng tiến lên, tình nghĩa dễ bị kẹt lại. Cửa hẹp thử chân người, còn việc hẹp thử lòng người.','mâm cơm nhà cổ hơi chật, mọi người nhường chỗ cho nhau'),
('scene_013','Biết nhường không phải tự hạ thấp mình. Đó là giữ cho đường chung khỏi đổ vỡ. Khi ta để người khác qua trong yên ổn, có ngày chính ta cũng được đời mở cho một lối. Người có phúc thường không phải người đi trước, mà là người đi sao cho phía sau còn muốn theo.','con đường làng mở rộng sau cánh cổng hẹp, ánh hoàng hôn'),
('scene_014','Vậy nên, gặp cửa hẹp đừng chỉ hỏi ai được trước. Hãy hỏi ai cần bình an hơn. Nhường một bước, phúc không mất đi; trái lại, đường đời vì lòng rộng mà tự rộng thêm. Một nhà, một làng, một đời người đều rộng ra từ những bước lùi biết nghĩ.','hai người cúi đầu nhường nhau trước cổng làng, ánh sáng ấm'),
]
style='Vertical 9:16, cổ phong giấy vàng, aged parchment, ink-wash cinematic historical Vietnamese moral story scene, muted ochre brown sepia charcoal, dignified calm mood, one clear symbolic scene: '
neg=' Negative prompt: no modern objects, no modern clothing, no cars, no motorbikes, no phones, no electric lights, no plastic, no Western faces, no wrong culture, no fantasy, no sci-fi, no neon, no glossy 3D, no anime, no cartoon, no model sheet, no watermark, no logo, no text.'
objs=[{'scene_id':sid,'narration':nar,'visual_prompt':vis,'image_prompt':style+vis+'.'+neg} for sid,nar,vis in scenes]
words=sum(len(re.findall(r'[\wÀ-ỹ]+',o['narration'],re.UNICODE)) for o in objs)
assert 620<=words<=660, words
(p/'script/scenes.json').write_text(json.dumps({'title':title,'metadata':{'project_id':pid,'topic_sentence':topic,'thumbnail_symbol':'two villagers politely yielding at a narrow ancient gate'},'scenes':objs},ensure_ascii=False,indent=2),encoding='utf-8')
(p/'script/scenes_validation.json').write_text(json.dumps({'passed':True,'scene_count':14,'word_count':words},ensure_ascii=False,indent=2),encoding='utf-8')
steps=[{'step':i,'status':'completed' if i<=2 else 'pending'} for i in range(1,15)]
(p/'checklist_14_steps.json').write_text(json.dumps({'project_id':pid,'project_name':pid[4:].replace('-',' '),'topic_sentence':topic,'title':title,'target_words':'620-660','target_scenes':14,'channel':'Loi Co Nhan','workflow_version':'v3-current-short-ai-script','current_step':3,'steps':steps},ensure_ascii=False,indent=2),encoding='utf-8')
(p/'checklist_14_steps.md').write_text(f'# Checklist 14 Steps\n\nProject ID: {pid}  \nTopic: {topic}  \nTitle: {title}  \nTarget: 620-660 words, about 14 scenes  \n\n- Step 01: Completed\n- Step 02: Completed (14 scenes, {words} words)\n'+'\n'.join([f'- Step {i:02}: Pending' for i in range(3,15)])+'\n',encoding='utf-8')
src=base/'project/209-Dung-de-mot-lan-thang-mieng-lam-thua-ca-doi-nghia-tinh'
for name in ['scripts_step03_04_assets_tts.py','scripts_compose_master_worker.py','scripts_run_asr_and_build_subtitles.py','scripts_generate_intro_audio.py','scripts_worker_rebuild_strict.py','scripts_worker_rebuild_yt.py']:
    (p/name).write_text((src/name).read_text(encoding='utf-8').replace(str(src),str(p)),encoding='utf-8')
print(pid, words)
