#!/usr/bin/env python3
from pathlib import Path
import json,re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='140-Dung-De-Long-Tham-Nho-Lam-Duc-Mat-Nghia-Lon'
topic='Đừng để lòng tham nhỏ làm đục mất nghĩa lớ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, lòng tham nhỏ nếu không giữ, lâu ngày có thể làm đục mất nghĩa lớn. Một giọt mực rơi vào chén nước trong, ban đầu tưởng chẳng đáng kể, nhưng uống vào rồi mới biết vị sạch đã không còn.','chén nước trong bị một giọt mực đen làm vẩn đục'),
('scene_002','Ở phố huyện có người giữ kho tên Khiêm. Ông làm thuê cho nhà buôn lụa, tiền công không nhiều nhưng được tin cậy, vì sổ sách rõ ràng và chìa khóa kho chưa từng rời khỏi thắt lưng.','người giữ kho áo nâu cầm sổ sách và chìa khóa cổ'),
('scene_003','Một mùa hàng bán chạy, chủ nhà đi xa, trong kho còn vài súc lụa vụn. Người bạn rủ Khiêm lấy một ít đem bán, nói lụa vụn chẳng ai đếm, đời nghèo thì phải biết xoay xở.','người bạn thì thầm bên các súc lụa trong kho tối'),
('scene_004','Khiêm ban đầu lắc đầu. Nhưng đêm xuống, nhìn mái nhà dột và áo con vá chằng vá đụp, lòng ông dao động. Một ý nghĩ nhỏ bò vào như con kiến tìm đường qua khe cửa.','người cha nhìn mái nhà dột và áo vá của con'),
('scene_005','Ông lấy một mảnh lụa thật nhỏ giấu vào tay áo. Không ai thấy. Chỉ có tiếng khóa kho khép lại nghe nặng hơn mọi ngày. Trên đường về, mảnh lụa mềm mà lòng ông cứng như đá.','người giữ kho giấu mảnh lụa nhỏ trong tay áo dưới trăng'),
('scene_006','Vợ ông thấy lụa đẹp thì hỏi. Khiêm nói là phần thưởng chủ cho. Người vợ không hỏi thêm, nhưng đứa con nhỏ vô tình nói, cha dạy con không được lấy đồ không phải của mình.','người vợ cầm mảnh lụa, đứa trẻ nhìn cha trong nhà nghèo'),
('scene_007','Câu nói ấy như ngọn kim châm vào tim. Khiêm thức trắng, nhìn mảnh lụa đặt trên bàn. Ông hiểu, thứ mình lấy không chỉ là vải, mà là phần sạch trong mắt con mình.','mảnh lụa trên bàn gỗ, người cha ngồi thức đêm hối hận'),
('scene_008','Sáng sớm, ông đem lụa trả lại kho, rồi tự ghi vào sổ lỗi của mình. Khi chủ trở về, Khiêm cúi đầu nhận hết, không xin giảm tội, chỉ xin được sửa trước khi lòng tối thêm.','người giữ kho cúi đầu trước chủ nhà buôn, sổ sách mở ra'),
('scene_009','Chủ nhà im lặng rất lâu. Sau cùng, ông nói, người chưa từng sai thì hiếm, người sai mà tự trả lại trước khi bị bắt mới còn đáng giữ. Khiêm được tha, nhưng tiền công bị trừ một mùa.','chủ nhà buôn trầm tư trước kho lụa, người giữ kho cúi đầu'),
('scene_010','Khiêm đem chuyện kể với con. Ông nói, nghèo không đáng xấu hổ, nhưng vì nghèo mà để tay bẩn thì xấu hổ cả đời. Đứa trẻ nghe xong, tự vá lại chiếc áo cũ.','người cha nói chuyện với con, đứa trẻ vá áo dưới đèn dầu'),
('scene_011','Từ đó, Khiêm càng giữ kho cẩn trọng hơn. Mỗi lần thấy món lợi nhỏ, ông nhớ mảnh lụa đêm ấy. Lòng tham giống bụi trên gương, lau sớm thì sạch, để lâu sẽ chẳng soi được mặt mình.','người giữ kho lau chiếc gương đồng cạnh chìa khóa'),
('scene_012','Người đời thường ngã không phải vì núi cao, mà vì viên đá nhỏ dưới chân. Một chút bớt xén, một chút giấu giếm, một chút tự tha thứ cho mình, dần dần làm nghĩa lớn phai màu.','viên đá nhỏ trên đường làm người suýt vấp, biểu tượng cổ phong'),
('scene_013','Biết dừng trước lợi nhỏ không làm ta thiệt. Nó giữ cho ta còn đường ngẩng đầu trước người thân, còn chỗ đứng trước bạn bè, còn một giấc ngủ yên khi đêm xuống.','người đàn ông ngủ yên bên chìa khóa và sổ sạch'),
('scene_014','Vậy nên, thấy lợi nhỏ mà lòng nghiêng, hãy nghĩ đến nghĩa lớn phía sau. Giữ tay sạch trong việc nhỏ, phúc mới bền trong việc lớn; giữ được lòng ngay, nhà nghèo cũng sáng.','bàn tay sạch đặt lên sổ sách, căn nhà nghèo 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,'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':'small silk scrap beside clean ledger and key'},'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/139-Biet-Giu-Mot-Goc-Yen-Trong-Nha-Phuc-Se-Co-Noi-Ve'
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)
