#!/usr/bin/env python3
from pathlib import Path
import json,re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='137-Biet-Cham-Lai-Mot-Buoc-Tranh-Duoc-Mot-Doi-Hoi-Han'
topic='Biết chậm lại một bước, tránh được một đời hối hận'
title=topic+' | Lời cổ nhân dạy'
p=base/'project'/project_id
p.mkdir(parents=True,exist_ok=True)
for d in ['script','images/scenes','audio/voice_segments','subtitles','output/thumbnails','output/intro','logs','render_onepass']:(p/d).mkdir(parents=True,exist_ok=True)
scenes=[
('scene_001','Cổ nhân dạy, biết chậm lại một bước có thể tránh được một đời hối hận. Nhiều tai họa không đến từ đường dài, mà đến từ khoảnh khắc chân người quá vội, miệng người quá nhanh, lòng người chưa kịp sáng.','người lữ khách dừng trước ngã rẽ núi, ánh sáng giấy vàng cổ phong'),
('scene_002','Ở bến đò xưa có chàng trai tên Mẫn, khỏe mạnh, lanh lợi, nhưng tính nóng như nước sôi. Việc gì cũng muốn làm ngay, nói ngay, quyết ngay, nên nhiều lần đúng việc mà vẫn hỏng lòng người.','chàng trai chèo đò bên bến sông cổ, vẻ vội vàng'),
('scene_003','Một hôm, khách gửi ông một túi tiền nhờ chuyển qua sông. Giữa đường, có người báo cha Mẫn bệnh nặng. Mẫn hoảng hốt, định bỏ khách ở bến giữa để chạy về ngay.','túi tiền trên thuyền, người đưa tin vội bên bến sông'),
('scene_004','Ông lão lái đò cùng bến giữ tay anh lại. Cụ nói, chạy về là hiếu, nhưng bỏ lời hứa giữa dòng là làm đục cả hiếu. Chậm một khắc để làm trọn việc, chưa chắc là bất hiếu.','ông lão giữ tay chàng trai trên thuyền gỗ'),
('scene_005','Mẫn giận, cho rằng cụ không hiểu lòng con. Nhưng nhìn dòng nước xiết, anh đành đưa khách sang bờ, giao túi tiền đủ, rồi mới quay thuyền về nhà. Từng nhịp chèo như lửa đốt trong ngực.','chàng trai chèo thuyền qua dòng nước xiết, gương mặt căng thẳng'),
('scene_006','Khi về đến nơi, cha anh vẫn còn tỉnh. Người nhà nói bệnh đã dịu. Cha nắm tay Mẫn, nghe chuyện rồi bảo, con về chậm một chút nhưng lòng không mắc nợ, vậy cha mới yên.','người cha bệnh nằm trong nhà tranh nắm tay con'),
('scene_007','Đêm ấy, Mẫn ngồi ngoài hiên, nghĩ nếu mình bỏ khách giữa đường, cả đời sẽ mang tiếng thất tín. Một bước vội có thể nhanh hơn một khắc, nhưng để lại bóng dài suốt nhiều năm.','chàng trai ngồi ngoài hiên đêm, bóng dài trên nền đất'),
('scene_008','Từ đó, trước việc lớn, Mẫn tự đặt mái chèo xuống ba hơi thở. Gặp lời khích, anh không đáp ngay. Gặp lợi trước mắt, anh không vội đưa tay. Ba hơi thở ấy cứu anh khỏi nhiều lần sai.','mái chèo đặt ngang thuyền, chàng trai hít thở bên sông'),
('scene_009','Một lần khác, có kẻ vu anh giữ lại tiền thừa. Cơn giận bốc lên, anh suýt đánh người. Nhớ lời lão đò, anh chậm lại, mở sổ bến, gọi người làm chứng rồi nói từng câu.','chàng trai mở sổ bến đò trước đám đông'),
('scene_010','Sự thật sáng ra, người vu oan phải cúi đầu. Nếu hôm ấy Mẫn vung nắm tay trước, dù đúng cũng thành sai. Người thắng được cơn vội mới thật sự giữ được phần đúng của mình.','người vu oan cúi đầu, chàng trai đứng bình tĩnh'),
('scene_011','Ông lão lái đò cười, bảo nước sông sâu không sợ người chèo chậm, chỉ sợ người chèo loạn tay. Đời người cũng vậy, chậm mà chắc còn hơn nhanh mà đâm vào đá ngầm.','ông lão lái đò chỉ dòng nước sâu và đá ngầm'),
('scene_012','Người đời thường sợ lỡ cơ hội, sợ thua một câu, sợ mất mặt trước mắt. Nhưng ít ai sợ một quyết định nóng làm mất tình thân, mất chữ tín, mất bình an trong lòng.','ba ngả đường cổ với bóng người suy nghĩ dưới trời chiều'),
('scene_013','Chậm lại không phải là nhát. Đó là cho trí khôn theo kịp bàn tay, cho lòng nhân theo kịp lời nói. Một bước dừng đúng lúc đôi khi chính là chiếc cầu qua vực sâu.','chiếc cầu gỗ nhỏ bắc qua vực, người dừng chân trước khi bước'),
('scene_014','Vậy nên, trước khi nói lời nặng, ký việc lớn, hay bước vào cơn giận, hãy chậm lại một nhịp. Một nhịp ấy có thể không ai thấy, nhưng có thể cứu ta khỏi một đời hối hận.','người lữ khách đứng yên trước bình minh, tay đặt lên tim'),
]
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,'image_prompt':style+vis+'.'+neg,'visual_prompt':vis} for sid,nar,vis in scenes]
(p/'script/scenes.json').write_text(json.dumps({'title':title,'metadata':{'project_id':project_id,'topic_sentence':topic,'thumbnail_symbol':'boat oar paused above a quiet river before a dangerous current'},'scenes':objs},ensure_ascii=False,indent=2),encoding='utf-8')
words=sum(len(re.findall(r"[\wÀ-ỹ]+",nar,re.UNICODE)) for _,nar,_ in scenes)
(p/'script/scenes_validation.json').write_text(json.dumps({'passed':620<=words<=660,'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':project_id,'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: {project_id}  \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/136-Dung-De-Mot-Lan-Noi-Doc-Lam-Hong-Ca-Mua-Lanh'
for name in ['scripts_complete_short_project.py','scripts_worker_rebuild_strict.py','scripts_worker_rebuild_yt.py','scripts_run_asr_and_build_subtitles.py']:
 txt=(src/name).read_text(encoding='utf-8').replace(str(src),str(p));(p/name).write_text(txt,encoding='utf-8')
print(p,words)
