#!/usr/bin/env python3
from pathlib import Path
import json,re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='138-Giu-Mot-Nen-Nhang-Trong-Long-Hon-Dot-Nghin-Nen-Ngoai-Cua'
topic='Giữ một nén nhang trong lòng, hơn đốt nghìn nén ngoài cửa'
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, giữ một nén nhang trong lòng còn hơn đốt nghìn nén ngoài cửa. Lễ nghĩa không nằm ở khói bay cao, mà nằm ở điều thiện âm thầm ta giữ được khi không ai nhìn thấy.','nén nhang nhỏ cháy trong gian thờ cổ, ánh sáng ấm'),
('scene_002','Ở làng dưới chân đồi có người tên Hòa, mỗi dịp lễ đều sắm hương hoa thật lớn. Ông quỳ lâu trước miếu, nói lời cung kính, khiến ai đi qua cũng khen là người trọng lễ.','người đàn ông quỳ trước miếu cổ với nhiều hương hoa'),
('scene_003','Nhưng về nhà, Hòa thường gắt với vợ, xem nhẹ người làm, và hay bỏ qua lời hứa nhỏ. Ông nghĩ chuyện trong nhà không ai thấy, còn ngoài miếu chỉ cần đủ lễ là lòng đã sạch.','người đàn ông cau có trong sân nhà, người làm cúi đầu'),
('scene_004','Một năm hạn lớn, dân làng góp gạo giúp nhà nghèo. Hòa mang lễ vật đến miếu rất nhiều, nhưng khi người hàng xóm xin vay ít gạo cho mẹ bệnh, ông khép cửa, bảo kho nhà cũng chẳng dư.','người hàng xóm nghèo đứng ngoài cửa kho gạo đóng kín'),
('scene_005','Đêm ấy, ông mơ thấy khói hương bay lên rồi tản mất trong gió, còn trước cửa nhà mình có một bát cơm nguội đặt lặng lẽ dưới mưa. Ông tỉnh dậy mà lòng vẫn nặng.','khói hương tan trong gió, bát cơm nguội ngoài mưa'),
('scene_006','Sáng ra, Hòa gặp một vị sư già quét lá bên miếu. Ông hỏi vì sao mình lễ nhiều mà lòng vẫn bất an. Sư già không đáp ngay, chỉ đưa cho ông một nén nhang chưa đốt.','sư già quét lá đưa nén nhang cho người đàn ông'),
('scene_007','Sư nói, hương ngoài tay cháy hết thì tàn, hương trong lòng cháy lên mới thành đức. Nếu miệng khấn thiện mà tay khép cửa trước người khó, khói nhiều cũng không che được lòng hẹp.','sư già giảng bên miếu, nén nhang chưa đốt trong tay'),
('scene_008','Hòa nghe xong xấu hổ. Ông về mở kho, mang gạo sang cho người hàng xóm, không đánh trống, không gọi ai chứng kiến. Lần đầu tiên, ông làm một việc thiện mà không cần tiếng khen đi kèm.','người đàn ông âm thầm mang gạo qua ngõ nhỏ'),
('scene_009','Người hàng xóm khóc, còn Hòa chỉ cúi đầu. Bát cơm nóng trong nhà nghèo hôm ấy không có khói hương, nhưng lòng ông lại nhẹ hơn mọi lần quỳ lâu trước miếu.','gia đình nghèo nhận bát cơm nóng, người đàn ông cúi đầu'),
('scene_010','Từ đó, mỗi khi thắp hương, Hòa tự hỏi hôm nay mình đã giữ được điều gì trong lòng. Một lời mềm với vợ, một phần cơm cho người khó, một món nợ nhỏ trả đúng hẹn, đều là hương thật.','người đàn ông thắp một nén hương rồi quay về giúp gia đình'),
('scene_011','Dân làng dần thấy ông đổi khác. Lễ vật trước miếu ít đi, nhưng cửa nhà ông mở rộng hơn. Người làm không còn sợ tiếng quát, trẻ nhỏ trong xóm cũng dám đến xin nước khi khát.','cửa nhà mở, người trong xóm đến xin nước dưới bóng cây'),
('scene_012','Người đời thường dễ chăm phần nhìn thấy. Áo lễ sạch, mâm cúng đầy, lời khấn dài. Nhưng phần không ai thấy mới quyết định phúc mỏng hay dày: một lòng biết thương người khi lợi mình bị chạm.','mâm lễ ngoài miếu và bàn tay trao cơm trong bóng tối'),
('scene_013','Lễ không sai, hương không sai. Sai là dùng lễ để che lòng lười sửa mình. Người có tâm thiện thì một nén nhang nhỏ cũng thơm; người không sửa lòng thì nghìn nén cũng chỉ là khói.','một nén nhang nhỏ tỏa sáng hơn đám khói dày'),
('scene_014','Vậy nên, trước khi cầu phúc ngoài cửa, hãy giữ một nén nhang trong lòng. Làm một việc lành kín đáo, giữ một lời hứa nhỏ, mở một cánh cửa cho người khó; phúc sẽ tự biết đường về.','cánh cửa mở ra ánh bình minh, nén nhang nhỏ trong nhà'),
]
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':'single incense stick glowing inside humble doorway'},'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/137-Biet-Cham-Lai-Mot-Buoc-Tranh-Duoc-Mot-Doi-Hoi-Han'
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)
