#!/usr/bin/env python3
from pathlib import Path
import json,re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='136-Dung-De-Mot-Lan-Noi-Doc-Lam-Hong-Ca-Mua-Lanh'
topic='Đừng để một lần nói độc làm hỏng cả mùa lành'
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, một lời độc có thể làm hỏng cả mùa lành. Người ta mất nhiều ngày để vun một vườn hoa, nhưng chỉ cần một gáo nước bẩn đổ xuống gốc, hương thơm cũng hóa thành điều tiếc nuối.','vườn hoa cổ phong bị một gáo nước đục làm héo một gốc'),
('scene_002','Ở làng bên sông có người trồng dâu tên Phúc. Ông chăm chỉ, hiền lành, cả năm ít nói nặng với ai. Nhờ vậy, nhà tuy không giàu nhưng khách đến mua lá dâu luôn thấy lòng nhẹ.','người trồng dâu áo nâu chăm vườn dâu bên sông'),
('scene_003','Một vụ xuân, con trai ông làm mất tiền bán lá. Phúc đang mệt vì sâu bệnh trong vườn, nghe tin liền buông một câu cay nghiệt, bảo con vô dụng, có mắt cũng như mù.','người cha tức giận trước sân, con trai cúi đầu cầm túi tiền rỗng'),
('scene_004','Câu nói ấy rơi xuống nhanh hơn ông kịp nghĩ. Đứa trẻ không cãi, chỉ lặng lẽ đi ra bờ sông. Từ hôm đó, nó vẫn làm việc, nhưng không còn hát trong vườn dâu như trước.','đứa trẻ lặng lẽ bên bờ sông, vườn dâu phía sau'),
('scene_005','Phúc tưởng chuyện trẻ con sẽ qua. Nhưng mùa xuân trong nhà như ngắn lại. Bữa cơm ít tiếng hỏi han, tiếng guồng tơ cũng khô hơn. Một câu độc đã làm lạnh nhiều ngày lành.','gian nhà dệt tơ lặng im, mâm cơm ít lời'),
('scene_006','Người mẹ già thấy vậy, đem một cành dâu bị sâu ăn đặt trước mặt Phúc. Bà nói, lá bị sâu còn biết hái bỏ, còn lời đã chạm vào lòng con thì hái bằng cách nào.','bà mẹ già đặt cành dâu sâu ăn trước mặt người con trai lớn'),
('scene_007','Phúc cúi đầu. Đêm ấy, ông ra vườn, thấy sương đọng trên lá non. Ông hiểu cây non sợ gió độc, lòng trẻ cũng sợ lời độc. Gió qua rồi, vết nghiêng vẫn còn.','người cha đứng trong vườn dâu đêm sương, vẻ hối hận'),
('scene_008','Sáng sau, ông gọi con ra bờ sông. Không trách nữa, không giảng dài, chỉ nhận rằng cha đã nói sai. Ông bảo, mất tiền còn kiếm lại, nhưng cha không muốn mất lòng con.','cha con ngồi bên bờ sông, người cha cúi đầu nhận lỗi'),
('scene_009','Đứa trẻ im lặng rất lâu rồi khóc. Nó nói mình không sợ mất tiền bằng sợ cha thật sự nghĩ mình vô dụng. Phúc nghe mà như có chiếc gai rút chậm khỏi ngực.','đứa trẻ khóc bên cha, dòng sông yên lặng'),
('scene_010','Từ đó, mỗi khi nóng giận, Phúc bẻ một chiếc lá sâu trước khi mở miệng. Lá sâu nhắc ông rằng cái hỏng phải được bỏ đi, đừng đem nọc độc ném vào người thân.','bàn tay bẻ lá dâu sâu ăn trước khi nói'),
('scene_011','Vườn dâu dần xanh lại, và tiếng hát của con cũng trở về. Người ngoài chỉ thấy mùa lá tốt, nhưng Phúc biết mùa lành ấy được cứu bằng một lời xin lỗi kịp lúc.','vườn dâu xanh, đứa trẻ hát nhẹ khi hái lá'),
('scene_012','Đời người ai cũng có lúc mệt, lúc lo, lúc nóng lòng. Nhưng mệt không phải cớ để nói độc. Lời độc giống tro nóng, ném ra tưởng nhẹ tay, rơi xuống đâu cũng để lại vết cháy.','tro nóng rơi trên nền giấy vàng bên mâm gia đình'),
('scene_013','Người khôn không phải người chưa từng lỡ lời, mà là người biết dừng, biết nhận, biết sửa trước khi vết cháy lan rộng. Một lời mềm sau lỗi lầm có thể cứu lại nhiều tháng ngày yên.','người đàn ông chắp tay xin lỗi trong sân nhà cổ'),
('scene_014','Vậy nên, khi lòng đang đầy độc khí, hãy khép miệng lại một nhịp. Giữ được một câu cay nghiệt, là giữ được một mùa lành; nói được một lời nhận lỗi, phúc nhà lại có đường quay về.','cánh cửa nhà mở ra vườn dâu xanh dưới bình minh'),
]
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':'wilted mulberry leaf beside warm family 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/135-Giu-Mot-Loi-Khen-Dung-Luc-Hon-Tram-Loi-Truong-Mat'
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)
