#!/usr/bin/env python3
from pathlib import Path
import json, re
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='129-Giu-Long-Ngay-Thang-Dung-So-Duong-Quanh-Co'
topic='Giữ lòng ngay thẳng, đừng sợ đường quanh co'
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, đường đời có thể quanh co, nhưng lòng người không nên cong theo thế cuộc. Người giữ lòng ngay thẳng có lúc đi chậm, có lúc chịu thiệt, nhưng mỗi bước đều để lại dấu chân sạch trên đất.','người lữ khách áo nâu đi trên đường núi quanh co, tay cầm gậy tre'),
('scene_002','Ở một huyện nhỏ, có người đo ruộng tên Khoan. Ông không giàu, không có họ hàng quyền thế, chỉ nổi tiếng vì thước đo trong tay chưa từng nghiêng về phía người trả nhiều bạc.','người đo ruộng cầm thước dây tre giữa cánh đồng cổ, dân làng đứng nhìn'),
('scene_003','Một mùa chia đất, nhà phú hộ muốn lấn thêm một khoảnh bờ ao. Họ đem rượu ngon và túi bạc đến, nói chỉ cần ông nới dây một gang, không ai biết, mọi người đều có phần yên ổn.','phú hộ đặt túi bạc và vò rượu bên bờ ao, người đo ruộng lặng nhìn'),
('scene_004','Khoan nhìn sợi dây đo rồi đáp, dây tre cong còn thay được, lòng người cong rồi khó thẳng lại. Một gang đất hôm nay có thể đổi lấy cả đời bị con cháu nhìn bằng ánh mắt nghi ngờ.','sợi dây tre kéo thẳng trên đất, người đàn ông từ chối túi bạc'),
('scene_005','Phú hộ tức giận, sai người nói xấu ông ngoài chợ. Có kẻ bảo ông cứng đầu, không biết thời thế. Có kẻ cười rằng người ngay thẳng thường chỉ nhận phần thiệt và bát cơm nguội.','chợ quê xưa, vài người xì xào, người đo ruộng đi qua bình thản'),
('scene_006','Vợ ông nghe chuyện thì lo. Đêm ấy, dưới ngọn đèn dầu, bà hỏi, nếu vì một việc ngay mà cả nhà bị ghét, liệu có đáng không. Khoan im lặng rất lâu.','gian nhà nghèo dưới đèn dầu, người vợ lo lắng bên mâm cơm'),
('scene_007','Ông chỉ vào chiếc cày dựng bên vách và nói, lưỡi cày phải thẳng mới rạch được luống sâu. Nếu lưỡi cày sợ đá mà cong đi, mùa sau cả ruộng sẽ mọc cỏ dại.','chiếc cày gỗ dựng bên vách, người chồng chỉ cho vợ xem'),
('scene_008','Vài tháng sau, mưa lớn làm bờ ao vỡ. Người trong làng phải xét lại mốc ruộng để chia nước. Khi mở sổ cũ của Khoan, từng nét ghi rõ ràng, không bên nào bắt bẻ được.','dân làng mở sổ ruộng dưới mái đình, mưa ngoài sân'),
('scene_009','Lúc ấy, những người từng chê ông mới hiểu. Một người ngay thẳng có thể làm người khác khó chịu trong chốc lát, nhưng khi sóng gió đến, chính sự ngay thẳng ấy trở thành cọc neo cho cả làng.','cọc gỗ neo thuyền bên dòng nước lũ, dân làng đứng quanh'),
('scene_010','Phú hộ cũng phải cúi đầu nhận phần đất đúng của mình. Ông không xin lỗi trước đám đông, nhưng từ hôm đó không còn dám sai người bẻ cong lời thật. Sự im lặng ấy cũng là một bài học.','phú hộ cúi đầu bên mốc ruộng, người đo ruộng đứng điềm tĩnh'),
('scene_011','Con trai Khoan lớn lên, có lần hỏi cha vì sao không chọn đường dễ. Ông dẫn con ra bờ ruộng, bảo, đường dễ mà dẫn xuống bùn thì càng đi càng lún; đường khó mà giữ chân sạch vẫn đáng đi.','cha con đứng bên bờ ruộng lúc hoàng hôn, con trai lắng nghe'),
('scene_012','Đời người không thiếu lúc bị dụ nghiêng một chút. Một chút sai trong cân, một chút lệch trong lời, một chút nhắm mắt trước điều trái, lâu ngày gom lại thành cái bóng khiến mình sợ chính mình.','cái cân cổ hơi lệch, bóng người dài trên nền đất vàng'),
('scene_013','Người giữ lòng ngay không phải để hơn người, mà để khi đêm xuống có thể ngủ yên. Danh lợi đến rồi đi, lời khen cũng đổi chiều, chỉ có lòng thẳng là chiếc gối không làm cổ đau.','người đàn ông nằm nghỉ yên dưới mái tranh, ánh đèn dầu ấm'),
('scene_014','Vậy nên, gặp đường quanh co đừng vội cong lòng. Cứ giữ thước ngay trong tay, giữ lời thật trên miệng, giữ điều phải trong lòng; đi chậm cũng được, miễn cuối đường không hổ thẹn với chính mình.','con đường quanh co mở ra ánh sáng, người lữ khách cầm thước tre đi tới'),
]
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':'straight bamboo measuring ruler over a winding village path, small oil lamp glow'},'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/128-Giu-Tin-Nhu-Giu-Lua-Nho-Dung-De-Mot-Lan-Gio-Lam-Tat'
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)
