#!/usr/bin/env python3
from pathlib import Path
import json, re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='131-Dung-De-Bua-Com-Nha-Lanh-Vi-Loi-Hon-Thua'
topic='Đừng để bữa cơm nhà lạnh vì lời hơn thua'
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, bữa cơm nhà không chỉ ấm nhờ lửa bếp, mà ấm nhờ lời nói biết nhường nhau. Cơm còn nóng mà lòng người nguội lạnh, thì mâm đầy cá thịt cũng chẳng nuôi nổi hòa khí trong nhà.','mâm cơm cổ trong gian bếp, hơi nóng bốc lên nhưng người nhà lặng im'),
('scene_002','Ở thôn Đông có đôi vợ chồng làm nghề đan rổ. Nhà không giàu, nhưng trước kia tối nào cũng có tiếng cười bên bếp. Một bát canh rau, vài miếng cá khô, vậy mà ai cũng thấy đủ.','vợ chồng đan rổ bên bếp tranh, mâm cơm rau cá giản dị'),
('scene_003','Rồi việc buôn bán khá hơn, tiền vào nhà nhiều hơn. Người chồng bắt đầu kể công, người vợ cũng nhắc phần mình chịu khổ. Mỗi câu nói như một chiếc đũa gõ vào bát, nhỏ thôi mà nghe chói tai.','vợ chồng bên mâm cơm, đũa chạm bát, không khí căng thẳng'),
('scene_004','Ban đầu chỉ là lời đùa. Sau thành lời so đo. Chồng nói không có mình thì nhà này chẳng khá. Vợ đáp không có mình giữ cửa giữ con, tiền kiếm được cũng trôi như nước qua sàng.','hai người quay mặt trong gian nhà cổ, chiếc sàng tre cạnh cửa'),
('scene_005','Con trẻ ngồi giữa mâm, tay cầm bát mà không dám gắp. Cơm vẫn thơm, canh vẫn bốc khói, nhưng trong mắt đứa trẻ, bữa tối giống như ngồi bên bếp đã tắt lửa.','đứa trẻ ôm bát cơm nhìn cha mẹ cãi nhau trong ánh đèn dầu'),
('scene_006','Một hôm, người mẹ già từ quê lên thăm. Bà nhìn mâm cơm im lặng, rồi chậm rãi lấy hai que củi đặt chéo nhau trước bếp. Lửa bỗng yếu đi, khói tràn ra cay mắt mọi người.','bà mẹ già đặt hai que củi chéo trước bếp, khói bay trong gian nhà'),
('scene_007','Bà nói, củi đặt sai thì lửa không cháy, người trong nhà cứ chặn lời nhau thì tình cũng không ấm. Muốn bếp sáng, củi phải biết nhường chỗ; muốn nhà yên, miệng phải biết nhường lời.','bà mẹ già giảng bên bếp, vợ chồng lặng nghe'),
('scene_008','Người chồng cúi xuống gắp lại củi. Người vợ lặng lẽ thêm nước vào nồi canh. Không ai thắng câu nào, nhưng khói bớt cay, lửa lại đỏ, và đứa trẻ lần đầu dám gắp miếng rau.','vợ chồng cùng sửa bếp, đứa trẻ nhẹ nhàng gắp rau'),
('scene_009','Từ hôm ấy, trước bữa cơm, họ tự nhắc nhau bỏ chuyện hơn thua ngoài cửa. Việc đúng sai để lúc lòng nguội hãy nói. Mâm cơm là nơi nuôi người, không phải nơi đem công lao ra cân.','cánh cửa nhà khép lại, gia đình ngồi quanh mâm cơm yên hòa'),
('scene_010','Có khi người chồng mệt, muốn buông một câu nặng. Ông nhìn đứa con nhỏ rồi dừng lại. Có khi người vợ tủi, muốn kể khổ, bà múc thêm bát canh trước rồi nói sau.','người cha dừng lời, người mẹ múc canh cho con dưới ánh đèn'),
('scene_011','Lâu dần, nhà ấy không phải hết khó, mà biết để cái khó đứng ngoài mâm cơm. Tiếng đũa chạm bát trở lại nhẹ nhàng. Trẻ con ăn ngon hơn, người lớn cũng ngủ yên hơn.','mâm cơm gia đình ấm áp, tiếng đũa nhẹ, trẻ con mỉm cười'),
('scene_012','Người đời thường giữ mặt với khách lạ, nhưng lại buông lời sắc với người thân. Họ quên rằng người ngoài nghe rồi đi, còn người nhà phải ngồi cùng ta qua rất nhiều bữa cơm sau đó.','người khách đi xa ngoài cổng, trong nhà gia đình ngồi bên mâm cơm'),
('scene_013','Một lời hơn thua có thể làm mình hả giận trong chốc lát, nhưng làm bát cơm của con cái nghẹn lại nhiều năm. Phúc nhà không chỉ nằm trong hũ gạo, mà nằm trong hòa khí quanh mâm.','hũ gạo và mâm cơm, đứa trẻ nhìn bát cơm lặng lẽ'),
('scene_014','Vậy nên, khi ngồi xuống ăn cùng người thân, hãy đặt cái tôi thấp hơn chiếc bát. Nhường một câu, bữa cơm ấm lại; giữ một lời mềm, phúc nhà sẽ có chỗ ngồi lâu dài.','gia đình quây quần bên mâm cơm ấm, ánh lửa bếp sáng'),
]
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':'warm family meal beside ancient kitchen fire, crossed chopsticks softened into harmony'},'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,'checks':{'no_heading_scenes':True,'required_fields':True,'target_words_620_660':620<=words<=660}},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,'project_name':project_id[4:].replace('-',' '),'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  \nChannel: Loi Co Nhan  \nWorkflow version: v3-current-short-ai-script\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/130-Giu-Goc-Re-Sach-Cay-Doi-Moi-Ben-Lau'
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)
