#!/usr/bin/env python3
from pathlib import Path
import json,re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='135-Giu-Mot-Loi-Khen-Dung-Luc-Hon-Tram-Loi-Truong-Mat'
topic='Giữ một lời khen đúng lúc, hơn trăm lời trước mặt'
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 khen đúng lúc có thể nâng người qua đoạn đường khó, còn trăm lời trước mặt đôi khi chỉ làm lòng sinh kiêu. Khen người không phải để làm ồn, mà để tưới đúng nơi đang khô hạn.','người già trao lời động viên cho người trẻ bên đường đất cổ'),
('scene_002','Ở làng dệt có cậu học trò tên Nghiêm, tay vụng, chữ chậm, thường bị bạn bè chê cười. Cậu càng cố càng run, càng run càng sai, như con thoi mắc sợi trong khung cửi.','cậu học trò vụng về bên khung cửi, bạn bè cười xa xa'),
('scene_003','Thầy đồ trong làng thấy vậy nhưng không mắng trước lớp. Ông chỉ bảo mọi người tiếp tục học, rồi sau buổi chiều gọi Nghiêm ở lại, đưa cậu xem một nét chữ vừa thẳng hơn hôm qua.','thầy đồ chỉ một nét chữ trên giấy vàng cho học trò'),
('scene_004','Thầy nói, hôm nay con chưa giỏi, nhưng nét này đã có xương. Người có xương thì đứng được. Một câu ấy nhỏ, không ai nghe thấy, nhưng trong lòng Nghiêm như có ngọn đèn được châm lửa.','cậu học trò nhìn nét chữ dưới đèn dầu, ánh mắt sáng lên'),
('scene_005','Từ hôm đó, cậu bớt sợ bảng gỗ. Mỗi ngày viết chậm một chút, sửa một nét, giữ một hơi thở. Bạn bè vẫn chê, nhưng cậu không còn nghe lời chê lớn hơn lời thầy đã đặt vào lòng.','cậu học trò tập viết một mình trong lớp cổ'),
('scene_006','Một người hàng xóm bảo thầy đồ, sao không khen trước lớp để cậu nở mặt. Thầy lắc đầu, mầm non mới nhú không nên phơi giữa gió lớn; khen sai chỗ cũng có thể làm người yếu thêm sợ.','thầy đồ bên cây non, người hàng xóm thắc mắc'),
('scene_007','Ông nói, lời khen giống chén nước. Người khát cần uống, nhưng đổ giữa sân chỉ làm ướt đất. Khen đúng lúc, đúng chỗ, đúng điều thật, mới khiến người nghe có sức đi tiếp.','chén nước nhỏ đặt cạnh bút lông và giấy học trò'),
('scene_008','Nhiều tháng sau, Nghiêm viết được một bài khá. Lần này thầy đọc trước lớp, không tô vẽ quá lời, chỉ nói rằng sự bền bỉ đã bắt đầu có quả. Cả lớp im lặng nhìn cậu khác đi.','thầy đồ đọc bài trong lớp, học trò lắng nghe'),
('scene_009','Nghiêm không kiêu, vì lời khen đầu tiên thầy cho cậu không phải để khoe, mà để đứng dậy. Cậu hiểu khen thật không làm người bay lên, mà giúp người đặt chân vững hơn.','cậu học trò cúi đầu cảm ơn, chân đứng vững trên nền đất'),
('scene_010','Sau này, Nghiêm thành người dạy trẻ nhỏ. Gặp đứa bé viết xấu, cậu không vội quở. Cậu tìm một nét còn ngay, một chữ còn sáng, rồi nhẹ nhàng chỉ cho đứa trẻ thấy.','người thầy trẻ chỉ nét chữ cho đứa bé trong lớp'),
('scene_011','Đứa trẻ ấy cũng đổi khác như cậu năm xưa. Có khi một đời người không cần ai nâng bằng vàng bạc, chỉ cần một người nhìn thấy phần đang cố gắng mà nói ra đúng lúc.','đứa trẻ mỉm cười bên trang giấy, thầy trẻ đứng cạnh'),
('scene_012','Người đời thường tiếc lời khen với người nhà, nhưng lại phung phí lời chê. Họ sợ khen làm người khác tự mãn, mà quên rằng thiếu một lời ấm, nhiều tấm lòng đã lạnh từ rất sớm.','gia đình trong nhà cổ, một người trẻ cúi đầu buồn bên bàn học'),
('scene_013','Khen không phải nịnh. Nịnh là đổ mật vào tai để cầu lợi, còn khen đúng là đặt một que chống vào lưng người đang mỏi. Một bên làm mềm xương, một bên giúp người đứng thẳng.','que chống tre tựa bên lưng người đi đường mệt mỏi'),
('scene_014','Vậy nên, thấy ai thật lòng cố gắng, đừng giữ mãi lời lành trong bụng. Một lời khen đúng lúc, đúng thật, đúng chỗ, có thể thành ngọn đèn nhỏ soi người ấy qua một đoạn tối dài.','ngọn đèn nhỏ soi đường cho người trẻ đi qua đê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 oil lamp beside brush-written praise on parchment'},'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/134-Nuoc-Duc-Dung-Voi-Khuay-Long-Roi-Se-Trong'
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)
