#!/usr/bin/env python3
from pathlib import Path
import json, re, shutil
base=Path('/data/video-pipeline/Channel-Loi-Co-Nhan')
project_id='128-Giu-Tin-Nhu-Giu-Lua-Nho-Dung-De-Mot-Lan-Gio-Lam-Tat'
topic='Giữ tín như giữ lửa nhỏ, đừng để một lần gió làm tắ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 xem chữ tín như ngọn lửa nhỏ trong đêm. Lửa ấy không làm người ta giàu ngay, nhưng soi đường khi tối, sưởi lòng khi lạnh, và khiến người khác dám đặt tay mình vào tay ta.','ngọn lửa nhỏ trong đèn dầu cổ, bàn tay người dân quê che gió'),
('scene_002','Ở chợ huyện xưa có người bán vải tên Lâm. Hàng không nhiều, lời nói không khéo, nhưng ai đặt mua một thước vải, ông đều ghi vào sổ tre và giữ đúng ngày giao.','người bán vải áo nâu ghi sổ tre giữa chợ huyện cổ'),
('scene_003','Nhờ vậy, quán nhỏ của ông luôn có khách quen. Người ta mua vải của Lâm không chỉ vì sợi bền, mà vì lòng yên. Bỏ tiền ra, họ biết mình không bị cân thiếu hay hẹn suông.','quán vải nhỏ, khách quê chọn vải trong không khí tin cậy'),
('scene_004','Một năm mưa lớn, đường núi sạt, chuyến vải đẹp về trễ. Có phú hộ đặt trước hai cuộn để may áo cưới cho con gái. Nếu bán cho người khác, Lâm sẽ lời gấp đôi.','đường núi sạt lở, cuộn vải trong kho, phú hộ đứng chờ'),
('scene_005','Người nhà khuyên ông đổi lời, nói rằng ai cũng vì miếng cơm. Nhưng Lâm lắc đầu. Miếng cơm hôm nay nuốt được, còn chữ tín mất rồi, cả đời ăn cũng không thấy ngon.','gia đình trong quán vải tranh luận, người bán vải trầm ngâm giữ cuộn vải'),
('scene_006','Ông thức đêm vá lại mái kho, giữ hai cuộn vải khỏi ẩm, rồi sai con trai đi vòng đường xa báo thật ngày giao. Đứa trẻ hỏi, cha lỗ công như vậy để được gì.','người cha vá mái kho dưới mưa, đứa con cầm đèn dầu bên cạnh'),
('scene_007','Lâm chỉ vào bấc đèn và nói, lửa nhỏ muốn cháy lâu phải che từng cơn gió. Chữ tín cũng thế, không giữ trong lúc khó, thì lúc dễ cũng chỉ là lời trang điểm.','cận cảnh bấc đèn dầu được bàn tay che gió, cha giảng cho con'),
('scene_008','Ba ngày sau, phú hộ nhận vải đúng hẹn mới. Ông không trách, còn kể cho cả họ biết Lâm đã đi đường vòng báo tin. Một lần giữ lời trong khó khăn, hơn mười lần nói hay lúc thuận lợi.','phú hộ nhận cuộn vải, người bán cúi nhẹ giữa sân cổ'),
('scene_009','Từ đó, người trong vùng có việc quan trọng đều tìm đến quán ấy. Vải có khi không rẻ nhất, nhưng lòng người không phải lúc nào cũng mua bằng giá rẻ. Họ mua sự yên tâm.','dòng người đến quán vải, bảng gỗ giản dị, không khí yên bình'),
('scene_010','Nhiều năm sau, con trai Lâm lớn lên, mở thuyền buôn qua sông. Gặp bão, hàng hư một nửa, cậu vẫn trả đủ phần đã hứa. Người bạn buôn ngạc nhiên hỏi vì sao không giấu.','thuyền buôn trên sông sau bão, người trẻ kiểm hàng ướt'),
('scene_011','Cậu đáp, cha từng dạy, lời hứa là chiếc cầu. Đi qua rồi mà tự tay chặt cầu, lần sau chính mình cũng không còn đường quay lại. Người nghe im lặng rất lâu.','chiếc cầu gỗ nhỏ qua sông, người trẻ nói chuyện với bạn buôn'),
('scene_012','Đời người có lúc thiếu tiền, thiếu hàng, thiếu sức, nhưng đừng thiếu tín. Tiền thiếu còn vay được, hàng thiếu còn tìm được, sức thiếu còn nghỉ được; tín thiếu thì lòng người đóng cửa.','cửa gỗ khép hờ, bên ngoài có đồng tiền và cuộn hàng, ánh sáng lặng'),
('scene_013','Người giữ tín không phải lúc nào cũng thắng ngay. Có khi còn chịu thiệt trước mắt. Nhưng cái thiệt ấy giống hạt giống vùi trong đất, qua mùa mưa nắng mới thành bóng mát.','hạt giống nảy mầm dưới đất, bóng cây che người đi đường cổ'),
('scene_014','Vậy nên, đã hứa thì cân lời trước, đã nhận thì giữ đến cùng. Giữ tín như giữ lửa nhỏ trong tay áo; một lần để gió làm tắt, đường dài sẽ tối hơn rất nhiều.','người áo nâu nâng đèn nhỏ đi trên đường làng đêm, ánh lửa ấ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 flame protected by two hands beside folded cloth and bamboo ledger'},'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/127-Giu-Mieng-Khi-Gian-Phuc-Khong-Roi-Khoi-Cua'
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)
