#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
=============================================================================
GENERATOR: EPISODE 02 FULL HOLLYWOOD 30-MIN SCREENPLAY & 188 MUSE PROMPTS
=============================================================================
Tập 2: NỖI ĐAU BÁN MÌNH & CẠM BẪY LẦM THAN (188 Shots / 15 Cảnh / 3 Hồi)
Bám sát nguyên tác câu 0723 - 1204 của Nguyễn Du:
- Hồi 1 (Cảnh 01 - 05, 68 shots): Đêm trao duyên & Buổi sáng Mã Giám Sinh
- Hồi 2 (Cảnh 06 - 10, 60 shots): Biệt ly quan san, giông tố thất thân & Lầu xanh Lâm Tri
- Hồi 3 (Cảnh 11 - 15, 60 shots): Lầu Ngưng Bích khóa xuân & Bẫy Sở Khanh
=============================================================================
"""

import sys
import json
from pathlib import Path

# UTF-8 Windows
if sys.platform == "win32":
    try:
        sys.stdout.reconfigure(encoding="utf-8")
        sys.stderr.reconfigure(encoding="utf-8")
    except Exception:
        pass

BASE_DIR = Path(__file__).resolve().parent.parent
EPISODES_DIR = BASE_DIR / "episodes"
EP02_DIR = EPISODES_DIR / "ep02"
PROMPTS_DIR = EP02_DIR / "prompts"
SCREENPLAY_PATH = EP02_DIR / "screenplay.md"
MUSE_PROMPTS_PATH = PROMPTS_DIR / "muse_prompts.json"
BANANA_PROMPTS_PATH = PROMPTS_DIR / "banana_prompts.json"
MANIFEST_PATH = EP02_DIR / "manifest.json"

PROMPTS_DIR.mkdir(parents=True, exist_ok=True)

# 15 Scenes Breakdown: (Total 188 Shots)
# Scene 01: 12 shots - Khuê phòng đêm mưa gió, giọt sáp nến đỏ rỉ ra như giọt máu
# Scene 02: 16 shots - Kiều quỳ lạy Vân, lời cậy nhờ xé ruột
# Scene 03: 14 shots - Trao kỷ vật, lời nguyền linh hồn nương ngọn gió hiu hiu, tiếng thét Kim Lang
# Scene 04: 12 shots - Sáng hôm sau, Mã Giám Sinh đến sỗ sàng ngồi tót ghế trên
# Scene 05: 14 shots - Cuộc ngã giá buôn thịt, ép gảy đàn vịnh quạt, bốn trăm lượng bạc
# Scene 06: 12 shots - Lạy tạ song thân, cỗ xe ngựa rời làng trong cát bụi
# Scene 07: 10 shots - Rừng phong thu nhuốm màu quan san, chặng đường lưu lạc phương Nam
# Scene 08: 14 shots - Lữ quán hoang vắng, đêm giông bão thất thân (Chiaroscuro hoa lê tơi bời)
# Scene 09: 12 shots - Đại sảnh thanh lâu Tú Bà Lâm Tri & Bàn thờ Bạch Mi Thần
# Scene 10: 12 shots - Rút trâm tự vẫn bảo toàn danh tiết, Tú Bà lùi bước giam lỏng
# Scene 11: 12 shots - Lầu Ngưng Bích khóa xuân trước biển hoang vu
# Scene 12: 14 shots - Kiệt tác Tả cảnh ngụ tình: Cánh buồm xa xa & Cánh hoa đào trôi man mác
# Scene 13: 12 shots - Kiệt tác Tả cảnh ngụ tình: Nội cỏ rầu rầu & Tiếng sóng gầm quanh ghế ngồi
# Scene 14: 10 shots - Mũi tên bọc dải lụa đào, Sở Khanh buông lời nghĩa hiệp
# Scene 15: 14 shots - Vượt tường đêm không sao & Cliffhanger bẫy đuốc đỏ bìa rừng trúc

AUDIO_GUARD = (
    "Quy tắc âm thanh: Tuyệt đối KHÔNG sinh nhạc nền (no music/BGM), không âm thanh điện tử, "
    "không tạp âm rè nhiễu. Chỉ sinh âm thanh môi trường tự nhiên (foley, ambience) và thoại nhân vật chân thực."
)

SCENES_META = [
    {
        "num": 1, "shots": 12, "slug": "INT. THUY KIEU'S BEDCHAMBER - RAINY NIGHT",
        "title": "Cảnh 01: Khuê phòng đêm mưa gió - Giọt sáp nến đỏ rỉ máu",
        "act": 1, "loc": "Khuê phòng mộc mạc gia trang họ Vương, gian gác nhỏ, ánh đèn dầu lạc, mưa quất ngoài liếp",
        "chars": "Thúy Kiều (17t), Thúy Vân (16t)",
        "theme": "Mở đầu đêm cuối cùng Kiều ở gia trang họ Vương, nỗi cô đơn tột cùng trước kỷ vật tình đầu."
    },
    {
        "num": 2, "shots": 16, "slug": "INT. THUY KIEU'S BEDCHAMBER - NIGHT",
        "title": "Cảnh 02: Thúy Kiều sụp lạy Thúy Vân - Cậy em chị lạy rồi thưa",
        "act": 1, "loc": "Gian gác nhỏ, góc giường Thúy Vân, nền sàn đá gạch",
        "chars": "Thúy Kiều (17t), Thúy Vân (16t)",
        "theme": "Kiều quỳ lạy Vân, trao lại mối tơ duyên dang dở với Kim Trọng."
    },
    {
        "num": 3, "shots": 14, "slug": "INT. BEDCHAMBER - MIDNIGHT",
        "title": "Cảnh 03: Trao kỷ vật vườn Thúy & Tiếng thét Kim Lang xé màn đêm",
        "act": 1, "loc": "Bàn gỗ khuê phòng, chiếc thoa kim, tờ mây, quạt ngọc, phím tỳ bà",
        "chars": "Thúy Kiều (17t), Thúy Vân (16t)",
        "theme": "Trao kỷ vật, lời nguyền linh hồn nương ngọn gió hiu hiu trở về, tiếng thét Kim Lang và ngất lịm."
    },
    {
        "num": 4, "shots": 12, "slug": "EXT./INT. VUONG FAMILY COMPOUND - OVERCAST MORNING",
        "title": "Cảnh 04: Rạng đông ảm đạm - Mã Giám Sinh ngồi tót sỗ sàng",
        "act": 1, "loc": "Ngõ nhỏ gia trang họ Vương, sập gụ phòng khách",
        "chars": "Mã Giám Sinh (45t), Mụ Mối (50t), Vương Ông (56t), Vương Quan (15t)",
        "theme": "Bộ mặt nhẵn nhụi trơ trẽn của Mã Giám Sinh, hành vi sỗ sàng trèo tót lên ghế trên."
    },
    {
        "num": 5, "shots": 14, "slug": "INT. LIVING ROOM - MORNING",
        "title": "Cảnh 05: Cuộc ngã giá buôn thịt - Ép cung cầm nguyệt & Bốn trăm lượng bạc",
        "act": 1, "loc": "Tiền đường họ Vương, mặt bàn bày bạc nén, rèm che buồng trong",
        "chars": "Thúy Kiều (17t), Mã Giám Sinh, Mụ Mối, Vương Ông, Vương Bà",
        "theme": "Kiều bước ra đẫm lệ, bị săm soi ép gảy đàn vịnh quạt; bạc đổ đầy bàn định đoạt số phận."
    },
    {
        "num": 6, "shots": 12, "slug": "EXT. VILLAGE GATE - AFTERNOON",
        "title": "Cảnh 06: Biệt ly đoạn trường - Cỗ xe ngựa lăn bánh dặm hồng mịt mù",
        "act": 2, "loc": "Sân nhà họ Vương, ngõ làng, cỗ xe ngựa mành tre khép kín",
        "chars": "Thúy Kiều (17t), Vương Ông, Vương Bà, Thúy Vân, Vương Quan, Mã Giám Sinh",
        "theme": "Lạy tạ cha mẹ lần cuối, Vương Quan và Vương Ông nén sâu nỗi uất hận trượng phu, xe lăn bánh."
    },
    {
        "num": 7, "shots": 10, "slug": "EXT. AUTUMN MOUNTAIN PASS - LATE AFTERNOON",
        "title": "Cảnh 07: Rừng phong thu nhuốm màu quan san - Lưu đày phương Nam",
        "act": 2, "loc": "Đèo núi hiểm trở, rừng cây lá phong đỏ úa, dặm trường cát bụi hồng",
        "chars": "Thúy Kiều (trong xe), Mã Giám Sinh (cưỡi ngựa), Đoàn tùy tùng",
        "theme": "Bút pháp tả cảnh ngụ tình Nguyễn Du: Rừng phong thu đỏ rực máu lệ chia ly quan san."
    },
    {
        "num": 8, "shots": 14, "slug": "INT./EXT. ROADSIDE INN - STORMY NIGHT",
        "title": "Cảnh 08: Lữ quán hoang vắng - Đêm giông bão thất thân nhơ nhuốc",
        "act": 2, "loc": "Căn phòng trọ tồi tàn, ngọn nến đỏ chao đảo, vách nứa, cành hoa lê ngoài sân",
        "chars": "Thúy Kiều (17t), Mã Giám Sinh",
        "theme": "Bộ mặt thật của tên buôn người; ẩn dụ hoa lê rụng trong mưa bão (100% YouTube Green Dollar)."
    },
    {
        "num": 9, "shots": 12, "slug": "INT. BROTHEL MAIN HALL - DUSK",
        "title": "Cảnh 09: Đến đất Lâm Tri - Đại sảnh thanh lâu & Bàn thờ Bạch Mi Thần",
        "act": 2, "loc": "Đại sảnh thanh lâu tráng lệ ngột ngạt mùi phấn sáp, tượng Bạch Mi Thần mày trắng râu quặp",
        "chars": "Thúy Kiều (17t), Tú Bà (50t), Mã Giám Sinh, Các kỹ nữ lầu xanh",
        "theme": "Kiều đến Lâm Tri, bàng hoàng thấy bàn thờ quỷ quái, Tú Bà bắt lạy nhận sư phụ tiếp khách."
    },
    {
        "num": 10, "shots": 12, "slug": "INT. BROTHEL ROOM - NIGHT",
        "title": "Cảnh 10: Rút trâm tự vẫn bảo toàn danh tiết - Tú Bà lùi bước giam lỏng",
        "act": 2, "loc": "Gian phòng riêng lầu xanh, giường son, trâm ngọc nhọn hoắt",
        "chars": "Thúy Kiều (17t), Tú Bà, Đám tỳ nữ thanh lâu",
        "theme": "Kiều thà chết không chịu nhục, đâm trâm vào cổ; Tú Bà hoảng sợ đổi kế giam lỏng ra Lầu Ngưng Bích."
    },
    {
        "num": 11, "shots": 12, "slug": "EXT./INT. NGUNG BICH PAVILION - COASTAL CLIFF - TWILIGHT",
        "title": "Cảnh 11: Lầu Ngưng Bích khóa xuân - Vẻ non xa tấm trăng gần ở chung",
        "act": 3, "loc": "Lầu cao cô độc trên mỏm đá biển, non xa mờ sương, cồn cát vàng, trăng lạnh",
        "chars": "Thúy Kiều (17t)",
        "theme": "Khóa xuân giữa vũ trụ rợn ngợp; vầng trăng lạnh bầu bạn cùng người con gái lưu lạc."
    },
    {
        "num": 12, "shots": 14, "slug": "EXT. NGUNG BICH BALCONY - SUNSET / DUSK",
        "title": "Cảnh 12: Tả cảnh ngụ tình I - Cánh buồm xa xa & Cánh hoa đào trôi man mác",
        "act": 3, "loc": "Lan can lầu cao nhìn ra cửa biển hoàng hôn và ngọn nước mới sa",
        "chars": "Thúy Kiều (17t)",
        "theme": "Cánh buồm xa xa gợi nhớ song thân tựa cửa; cánh hoa đào trôi man mác dòng nước xiết thương thân."
    },
    {
        "num": 13, "shots": 12, "slug": "EXT. NGUNG BICH BALCONY - NIGHTFALL",
        "title": "Cảnh 13: Tả cảnh ngụ tình II - Nội cỏ rầu rầu & Tiếng sóng gầm quanh ghế ngồi",
        "act": 3, "loc": "Lan can lầu cao, đồng cỏ ven biển úa màu, biển động sóng vỗ vách đá ầm ầm",
        "chars": "Thúy Kiều (17t)",
        "theme": "Nội cỏ rầu rầu xanh mờ mịt; tiếng sóng gầm dữ dội quanh ghế báo hiệu định mệnh kinh hoàng."
    },
    {
        "num": 14, "shots": 10, "slug": "INT./EXT. NGUNG BICH BALCONY - DUSK",
        "title": "Cảnh 14: Mũi tên bọc dải lụa đào - Sở Khanh buông lời nghĩa hiệp",
        "act": 3, "loc": "Khung cửa sổ lầu cao, bãi cát phía sau lầu, bóng dáng Sở Khanh cưỡi ngựa",
        "chars": "Thúy Kiều (17t), Sở Khanh (25t)",
        "theme": "Mũi tên bọc thư tình bay qua cửa sổ, Sở Khanh buông lời nghĩa hiệp hứa cứu nàng đào thoát."
    },
    {
        "num": 15, "shots": 14, "slug": "EXT. BAMBOO FOREST CROSSROADS - PITCH BLACK NIGHT",
        "title": "Cảnh 15: Vượt tường đêm không sao & Bẫy đuốc đỏ Cliffhanger bìa rừng trúc",
        "act": 3, "loc": "Bìa rừng trúc hẻo lánh, đường đất bùn lầy, hàng chục ngọn đuốc rực lửa",
        "chars": "Thúy Kiều (17t), Sở Khanh, Tú Bà, Toán tay sai đao gậy",
        "theme": "Sở Khanh lật mặt cười nham hiểm, Tú Bà trên kiệu vây kín; Kiều rơi vào bẫy tuyệt vọng cùng cực."
    }
]

def generate_shot_details(sc_meta, shot_idx):
    sc_num = sc_meta["num"]
    sid = f"ep02_scene{sc_num:02d}_shot{shot_idx:02d}"
    
    # Custom details for each specific scene and shot
    # Build narrative, camera, audio and prompts
    framings = [
        "Toàn cảnh thiết lập (Wide Establishing Shot)",
        "Trung cảnh chuyển động (Medium Tracking Shot)",
        "Trung cận biểu cảm (Medium Close-Up - MCU)",
        "Cận cảnh gương mặt (Close-Up Facial)",
        "Cận cảnh đặc tả chi tiết (Detail Close-Up)",
        "Cực cận ánh mắt (Extreme Close-Up - ECU Eyes)",
        "Góc máy thấp trượt ngang (Low Angle Tracking)",
        "Góc máy qua vai (Over The Shoulder - OTS)",
        "Cận cảnh bàn tay chuyển động (Hand Movement Close-Up)",
        "Toàn cảnh góc rộng từ trên cao (High Angle Wide)",
        "Cận cảnh trượt chậm tiến lại (Slow Dolly In MCU)",
        "Toàn cảnh hoàng hôn / đêm tối (Atmospheric Wide Shot)",
        "Cận cảnh phản chiếu ánh sáng (Reflection Close-Up)",
        "Góc máy cận khóa khẩu hình (Direct Profile Close-Up)",
        "Toàn cảnh kết nối Head-Tail (Continuous Wide Shot)",
        "Cận cảnh tĩnh lặng biểu cảm vi mô (Static Contemplative Close-Up)"
    ]
    framing = framings[(shot_idx - 1) % len(framings)]

    # Detail logic per scene
    if sc_num == 1:
        # Khuê phòng đêm mưa gió
        visual_vi = (
            f"Khuê phòng mộc mạc gia trang họ Vương trong đêm mưa bão. Ánh đèn dầu lạc leo lét chao đảo. "
            f"Thúy Kiều (17 tuổi, thiếu nữ lưu lạc, gương mặt thanh tú nhợt nhạt sầu bi, áo lụa lam sầu muộn) "
            f"ngồi bất động bên bàn gỗ. Giọt sáp nến đỏ quạch rỉ chầm chậm xuống đế đồng lạnh ngắt như giọt máu. "
            f"Gió bấc rít qua khe liếp rung chuyển tấm rèm tre. Bàn tay nàng khẽ run rẩy chạm vào phím đàn tỳ bà."
        )
        audio_stem1 = "Dàn dây cello và đàn tranh cổ phong trầm buồn, nốt nhạc ai oán xé ruột."
        audio_stem2 = "Tiếng mưa đêm rền rĩ quất từng cơn vào mái ngói, tiếng gió bấc rít qua khe cửa."
        audio_stem3 = "Tiếng sáp nến rỉ tách tách xuống đế đồng, tiếng thở dài nấc nghẹn trầm đục."
        audio_stem4 = "Tiếng thì thầm run rẩy của Kiều: 'Hỡi Kim Lang... thôi thôi thiếp đã phụ chàng từ đây...'" if shot_idx in [11, 12] else "Im lặng."
        prompt_en = (
            f"Cinematic 35mm film still, {framing}. Thúy Kiều (17 years old, Vietnamese classical beauty, "
            f"wearing modest traditional sorrowful blue-gray Giao Linh robe, loose dark hair, pale sorrowful face, "
            f"tears glistening on porcelain skin) sitting in her modest dim wooden chamber at night. "
            f"Outside heavy rain beats against bamboo lattice windows. A red tallow candle drips thick red wax "
            f"onto a cold bronze candleholder like drops of blood. Chiaroscuro candlelight casting deep shadows. "
            f"Subtle breathing, trembling shoulders, melancholic expression. "
            f"Âm thanh: Tiếng mưa rơi rả rích trên mái ngói, tiếng gió bấc rít qua liếp cửa, tiếng sáp nến nhỏ giọt, tiếng nấc nghẹn. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 2:
        # Kiều quỳ lạy Vân
        visual_vi = (
            f"Thúy Vân (16 tuổi, áo lụa trắng ngà, nét mặt phúc hậu ngơ ngác) ngồi dậy trên sập gỗ. "
            f"Thúy Kiều quỳ sụp gối xuống nền đá hoa cương, hai tay run rẩy chắp trước ngực sụp lạy em gái. "
            f"Nước mắt Kiều rơi lã chã xuống mu bàn tay Thúy Vân. Vân hốt hoảng lao xuống đỡ chị trong bàng hoàng."
        )
        audio_stem1 = "Tiếng đàn bầu độc tấu u hoài da diết, nâng dần cao trào bi kịch."
        audio_stem2 = "Tiếng sấm ục ục từ xa vọng lại giữa đêm giông bão."
        audio_stem3 = "Tiếng vạt áo lụa xào xạc khi Kiều quỳ sụp, tiếng nấc nghẹn ngào."
        audio_stem4 = "Lời Kiều nghẹn ngào: 'Cậy em em có chịu lời, ngồi lên cho chị lạy rồi sẽ thưa...'" if shot_idx in [5, 6, 7] else "Tiếng Vân hốt hoảng: 'Chị Kiều! Chị làm gì thế?'"
        prompt_en = (
            f"Cinematic master shot, {framing}. Thúy Kiều (17yo, sorrowful flowing blue robe, hair down) "
            f"kneeling deeply on the stone floor, clasping hands in emotional plea to her sister Thúy Vân "
            f"(16yo, pure ivory silk robe, shocked compassionate eyes). Gentle warm candlelight illuminating "
            f"tears on both sisters' faces. Emotional feudal dignity, delicate micro-expressions of tragic sacrifice. "
            f"Âm thanh: Tiếng mưa rơi ngoài hiên, tiếng nấc nghẹn xót xa của Thúy Kiều, tiếng Thúy Vân thảng thốt. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 3:
        # Trao kỷ vật & Lời thề ngọn gió hiu hiu
        visual_vi = (
            f"Kiều run rẩy nâng từng kỷ vật: Chiếc thoa kim rơi trên cành đào, bức tờ mây ghi lời thề ước, "
            f"chiếc quạt ngọc và phím đàn tỳ bà đặt vào tay Thúy Vân. Ánh mắt Kiều đăm đắm nhìn ra ngọn cỏ ngoài liếp: "
            f"'Thấy hiu hiu gió thì hay chị về!'. Đột ngột Kiều ngửa mặt thét gọi Kim Lang rồi ngất lịm."
        )
        audio_stem1 = "Tiếng đàn tỳ bà gảy nốt đứt ruột hòa cùng tiếng violin dâng trào."
        audio_stem2 = "Cơn gió lốc quất tung rèm liếp, lá vàng xào xạc ngoài thềm."
        audio_stem3 = "Tiếng kỷ vật chạm nhẹ lanh lảnh, tiếng thân người ngã vật xuống nền chiếu."
        audio_stem4 = "Tiếng thét xé lòng: 'Ôi Kim Lang! Hỡi Kim Lang!' rồi tiếng nấc ngất lịm." if shot_idx in [11, 12] else "Im lặng."
        prompt_en = (
            f"Dramatic 35mm film shot, {framing}. Close-up of trembling hands passing an antique golden hairpin, "
            f"silk sworn poem scroll, and wooden pipa pick between two young women. Candle flame flaring violently "
            f"as wind blows through the shutters. Thúy Kiều collapsing in grief into her sister's arms. "
            f"Deep cinematic chiaroscuro, poetic emotional intensity, ancient Vietnamese noble household setting. "
            f"Âm thanh: Tiếng gió bão quất mạnh qua song cửa, tiếng kim hoàn chạm vào khay gỗ, tiếng ngã vật nghẹn ngào. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 4:
        # Mã Giám Sinh xuất hiện
        visual_vi = (
            f"Sáng hôm sau, sương mù ảm đạm. Mụ mối dẫn Mã Giám Sinh (45 tuổi, mày râu nhẵn nhụi, áo quần bảnh bao, "
            f"mặt mày trơ tráo kệch cỡm) bước vào tiền đường họ Vương. Hắn trèo tót lên sập gụ ngồi vắt vẻo, "
            f"phe phẩy chiếc quạt giấy sỗ sàng. Vương Quan (15 tuổi) và Vương Ông (56 tuổi) quai hàm bạnh chặt, "
            f"cơ mặt đanh lại nén sâu cơn uất hận trượng phu (Anti-Male-Tears)."
        )
        audio_stem1 = "Giai điệu ngũ cung mỉa mai, tiết tấu ngột ngạt căng thẳng."
        audio_stem2 = "Tiếng quạ kêu xa xăm trong sương sớm ảm đạm đầu làng."
        audio_stem3 = "Tiếng giày thêu dộng mạnh lên sàn gỗ khi Mã Giám Sinh ngồi tót lên sập, tiếng quạt giấy phành phạch."
        audio_stem4 = "Tiếng mụ mối đon đả chào hỏi ép giá."
        prompt_en = (
            f"Cinematic period drama shot, {framing}. Mã Giám Sinh (45yo, clean-shaven smug face, overly refined "
            f"ostentatious brocade robes, vulgar posture) insolently lounging atop the host's wooden carved divan. "
            f"In the background, Vương Ông (elderly father, 56yo) and young brother Vương Quan (15yo) stand stoically "
            f"with clenched jaws, heavy downward gazes, suppressed feudal anger, zero tears. "
            f"Muted overcast morning light filtering through traditional wooden lattice. "
            f"Âm thanh: Tiếng bước chân sỗ sàng trên sàn gỗ, tiếng quạt giấy mở xoạch, tiếng mụ mối đon đả. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 5:
        # Cuộc ngã giá buôn thịt & 400 lượng bạc
        visual_vi = (
            f"Kiều bước ra từ sau bức rèm trúc, gót son lảo đảo, vạt áo lam ướt đẫm nước mắt. "
            f"Mã Giám Sinh mắt sáng rực vẻ thèm thuồng con buôn; hắn bắt Kiều gảy đàn tỳ bà, bắt đề thơ quạt. "
            f"Sau hồi cò kè bớt một thêm hai, bốn trăm lượng bạc trắng lạnh tanh được đổ ào ào ra mặt bàn gỗ."
        )
        audio_stem1 = "Tiếng đàn tỳ bà ngập ngừng đứt quãng đầy cay đắng, tiếng trống điểm dồn dập."
        audio_stem2 = "Không khí tĩnh mịch nghẹt thở trong tiền đường gia trang."
        audio_stem3 = "Tiếng bạc nén va vào nhau lanh lảnh chát chúa, tiếng gieo xúc xắc đồng tiền buôn thịt."
        audio_stem4 = "Tiếng Mã Giám Sinh cất giọng cò kè: 'Bốn trăm lượng... vẹn ngoài bốn trăm!'."
        prompt_en = (
            f"Period cinema shot, {framing}. Thúy Kiều (17yo, pale sorrowful beauty, modest blue robe) holding an ornate "
            f"wooden pipa lute with downcast eyes, forced to play under the predatory gaze of the merchant Mã Giám Sinh. "
            f"On the dark polished wooden table, stacks of shiny silver ingots pour out cold and heavy. "
            f"Atmospheric indoor natural lighting, tragic beauty contrasted with brutal commerce. "
            f"Âm thanh: Tiếng dây đàn tỳ bà khẽ rung lạc điệu, tiếng bạc nén va chạm leng keng kim loại chát chúa. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 6:
        # Biệt ly đoạn trường
        visual_vi = (
            f"Sân gia trang họ Vương chiều tà. Thúy Kiều quỳ dập đầu lạy tạ cha mẹ lần cuối. Vương Bà ôm mặt nấc nghẹn. "
            f"Vương Quan (15 tuổi) và Vương Ông (56 tuổi) đứng thẳng lưng, quai hàm bạnh chặt gồ lên cơ má, "
            f"ánh mắt trĩu nặng nhìn mũi hài, tuyệt đối không rơi một giọt lệ (Anti-Male-Tears). "
            f"Kiều bước lên cỗ xe ngựa mành tre khép kín; bánh xe nghiến đá lăn đi trong cát bụi hồng mịt mù."
        )
        audio_stem1 = "Dàn nhạc giao hưởng ngũ cung dâng cao khúc ca biệt ly xé ruột."
        audio_stem2 = "Gió chiều cuốn bụi đất mù mịt trên con đường làng quê."
        audio_stem3 = "Tiếng bánh xe gỗ nghiến trên sỏi đá lọc cọc, tiếng roi ngựa vút 'chát'."
        audio_stem4 = "Tiếng Vương Bà nấc nghẹn: 'Con ơi...!', Kiều khẽ gọi: 'Cha mẹ giữ gìn...'."
        prompt_en = (
            f"Cinematic historical drama, {framing}. Thúy Kiều stepping into a covered horse carriage as the sun sets. "
            f"Her elderly parents and teenage brother stand by the rustic village gate watching in silence. "
            f"Male characters exhibit feudal stoicism—clenched jaws, straight backs, heavy solemn gazes, zero crying. "
            f"Dust swirling beneath the wooden carriage wheels in the orange twilight. "
            f"Âm thanh: Tiếng vó ngựa gõ lộc cộc trên đường đất, tiếng bánh xe gỗ kẽo kẹt, tiếng gió chiều thổi bụi rơm. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 7:
        # Rừng phong thu nhuốm màu quan san
        visual_vi = (
            f"Đoạn đường thiên lý hiểm trở về phương Nam. Rừng cây phong thu bạt ngàn nhuốm màu đỏ rực lá úa "
            f"tựa như máu lệ trải dài muôn dặm quan san. Cỗ xe ngựa nhỏ bé cô độc lọt thỏm giữa đèo núi trập trùng. "
            f"Qua khe mành tre, đôi mắt Kiều nhìn ra xa xăm ngấn lệ thương nhớ quê nhà."
        )
        audio_stem1 = "Tiếng sáo trúc cô liêu u tịch ngân vang giữa núi rừng hoang vu."
        audio_stem2 = "Tiếng gió mùa thu thổi xào xạc qua bạt ngàn lá phong đỏ, tiếng suối reo xa xa."
        audio_stem3 = "Tiếng lục lạc ngựa leng keng nhịp nhàng theo từng bước chân mệt mỏi."
        audio_stem4 = "Lời dẫn thơ V.O.: 'Rừng phong thu đã nhuốm màu quan san; Dặm hồng bụi cuốn mù mịt...'."
        prompt_en = (
            f"Cinematic wide landscape shot, {framing}. A solitary horse carriage traveling along an ancient mountain pass "
            f"surrounded by vast autumn maple forests blazing with deep crimson and golden red leaves. "
            f"Misty mountain peaks in the background, dust kicking up along the winding road. Poetic visual metaphor "
            f"of tragic separation in imperial Vietnam. Rich atmospheric color palette, 35mm film texture. "
            f"Âm thanh: Tiếng gió thu xào xạc thổi lá phong bay rào rào, tiếng chuông lục lạc ngựa leng keng cô quạnh. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 8:
        # Đêm lữ quán hoang vắng - Thất thân
        visual_vi = (
            f"Căn phòng trọ hoang tàn ven đường Lâm Tri trong đêm giông bão sấm chớp. Mã Giám Sinh hiện nguyên hình "
            f"tên ma cô buôn người hung hãn. Ẩn dụ nghệ thuật đỉnh cao 100% YouTube Green Dollar: "
            f"Bên ngoài hiên, một cành hoa lê trắng muốt bị mưa bão quật tơi bời, từng cánh hoa trắng dập nát rơi rụng "
            f"xuống vũng bùn lầy; ngọn nến đỏ trên bàn bị gió bấc quạt tắt phụt; ngón tay Kiều gảy đứt dây tỳ bà rướm máu."
        )
        audio_stem1 = "Tiếng violin căng thẳng rợn ngợp dồn dập rồi đứt phựt nốt cao."
        audio_stem2 = "Tiếng sấm sét chớp giật lóe sáng căn phòng, tiếng mưa quất ầm ầm trên mái lá nứa."
        audio_stem3 = "Tiếng cành cây gãy rắc, tiếng dây đàn tỳ bà đứt phựt 'tưng...', tiếng giọt máu rơi."
        audio_stem4 = "[KHÓA KHẨU HÌNH BẮT BUỘC]: Đôi môi nhân vật trong khung khép chặt, tiếng nấc câm lặng."
        prompt_en = (
            f"Artistic chiaroscuro cinema shot, {framing}. Visual metaphor for loss of innocence: Outside a weathered window, "
            f"a delicate white pear blossom branch is violently lashed by heavy rain and thunderstorm, pristine white petals "
            f"ripped away and falling into dark mud. Inside, a red candle suddenly extinguishes in a gust of wind. "
            f"Lightning flashes through wooden shutters casting dramatic high-contrast silhouettes. Zero graphic violence, "
            f"pure poetic nature metaphor compliant with monetization standards. "
            f"Âm thanh: Tiếng sấm sét rền vang chân trời, tiếng mưa quất rào rào vỡ cành hoa, tiếng gió rít dập tắt ngọn nến. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 9:
        # Đại sảnh thanh lâu Tú Bà
        visual_vi = (
            f"Đại sảnh thanh lâu Lâm Tri xa hoa nhơ nhớp, ngập tràn đèn lồng đỏ và mùi khói hương phấn sáp rẻ tiền. "
            f"Trên bức vách chính giữa ngự pho tượng Bạch Mi Thần quái dị (lông mày trắng, mắt trợn trừng, râu quặp). "
            f"Tú Bà (50 tuổi, mụ nạ dòng béo tốt mặt trét đầy phấn trắng bệch, áo lụa sặc sỡ) bước ra, đon đả bắt Kiều "
            f"phải quỳ lạy nhận sư phụ để hành nghề tiếp khách làng chơi."
        )
        audio_stem1 = "Âm nhạc ngũ cung ma quái, tiếng sáo trúc đục ngầu và tiếng thanh la gõ chát chúa."
        audio_stem2 = "Tiếng cười đùa lả lơi của khách làng chơi và tiếng tỳ nữ đi lại ồn ào."
        audio_stem3 = "Tiếng tẩu thuốc gõ cộp cộp xuống mặt bàn trà son, tiếng chuông đồng thanh lâu."
        audio_stem4 = "Tiếng Tú Bà cười lanh lảnh: 'Con hãy lạy nhận sư phụ, học nghề buôn phấn bán hương!'."
        prompt_en = (
            f"Cinematic historical drama, {framing}. Interior of an ornate ancient Chinese/Vietnamese brothel hall "
            f"in Lâm Tri. Dim red lanterns casting an eerie glow on an altar holding the peculiar White-Browed Deity "
            f"(Bạch Mi Thần statue). Madam Tú Bà (50yo, heavily powdered white makeup, plump cruel face, garish silk gown) "
            f"demanding obedience. Thúy Kiều (17yo, disheveled travel-worn blue robe) standing in horrified realization. "
            f"Âm thanh: Tiếng cười cợt lả lơi xa xa của kỹ nữ, tiếng mõ gõ vang trước bàn thờ ma quái, tiếng Tú Bà the thé. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 10:
        # Rút trâm tự vẫn
        visual_vi = (
            f"Uất ức và phẩm giá con nhà thi lễ bùng lên, Kiều rút phắt chiếc trâm cài tóc ngọc nhọn hoắt "
            f"đâm thẳng vào cổ toan tự vẫn! Máu tươi rỉ ra thấm đẫm vạt áo lam. Tú Bà và đám gia nhân hoảng hốt xông vào cản lại. "
            f"Sợ mất trắng món tiền bốn trăm lượng, Tú Bà lập tức đổi giọng ngọt xớt, băng bó vết thương cho Kiều "
            f"và hứa sẽ đưa nàng ra giam lỏng tại Lầu Ngưng Bích bên bờ biển."
        )
        audio_stem1 = "Dàn nhạc giao hưởng dâng trào cao trào kịch tính đến nghẹt thở rồi lắng xuống tiếng sáo thê lương."
        audio_stem2 = "Không khí tĩnh lặng đến rợn người sau cú đâm dứt khoát."
        audio_stem3 = "Tiếng trâm ngọc rơi 'keng' xuống sàn đá hoa, tiếng Tú Bà thở hổn hển thảng thốt."
        audio_stem4 = "Tiếng Tú Bà vội vã: 'Khoan khoan! Mau băng bó lại! Đưa nàng ra lầu Ngưng Bích khóa xuân tĩnh dưỡng!'."
        prompt_en = (
            f"Intense dramatic film still, {framing}. Thúy Kiều defiantly holding a sharp jade hairpin, choosing death "
            f"over dishonor with tragic noble dignity. Madam Tú Bà frantically waving her hands to stop her, terror in her eyes "
            f"at losing her investment. High tension, dramatic spotlighting from hanging lanterns, deep shadows on walls. "
            f"Âm thanh: Tiếng trâm ngọc rơi keng trên sàn đá, tiếng tỳ nữ la hét thất thanh, tiếng Tú Bà cuống quýt xoa dịu. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 11:
        # Lầu Ngưng Bích khóa xuân
        visual_vi = (
            f"Lầu Ngưng Bích chơ vơ ngự trên một mỏm đá nhô ra bờ biển hoang vu. Bốn bề non xa mờ sương, cồn cát vàng "
            f"mênh mông, vầng trăng lạnh treo lơ lửng giữa trời xanh ngắt. Thúy Kiều (17 tuổi, áo lam phong trần, nét mặt "
            f"hốc hác sầu muộn nhưng đoan trang) đứng tựa lan can gỗ nhìn ra vũ trụ vô cùng vô tận. Nàng cô đơn đến cùng cực."
        )
        audio_stem1 = "Tiếng đàn tranh rải nốt cao thanh thoát, hòa cùng tiếng đàn tỳ bà gảy khúc tương tư cô độc."
        audio_stem2 = "Tiếng gió biển thổi lồng lộng qua lan can gác lửng, tiếng sóng vỗ rì rào vào chân vách đá."
        audio_stem3 = "Tiếng vạt áo lụa bay phần phật trong gió biển, tiếng bước chân nhẹ trên sàn gỗ."
        audio_stem4 = "Lời dẫn thơ V.O.: 'Trước lầu Ngưng Bích khóa xuân; Vẻ non xa tấm trăng gần ở chung...'."
        prompt_en = (
            f"Majestic wide cinematic shot, {framing}. Ngưng Bích Pavilion perched alone on a steep rocky coastal cliff "
            f"overlooking the vast wild ocean. Distant misty blue mountains, yellow sand dunes, a cold solitary moon "
            f"hanging in the dusk sky. Thúy Kiều (17yo, solitary figure in fluttering pale blue robe) leaning against "
            f"the wooden balcony railing. Breathtaking visual scale, poetic isolation, master cinema lighting. "
            f"Âm thanh: Tiếng gió đại dương thổi phần phật qua mái lầu, tiếng sóng vỗ rì rào dưới vách đá sâu thẳm. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 12:
        # Tả cảnh ngụ tình I: Cánh buồm & Hoa trôi
        visual_vi = (
            f"Kiệt tác tả cảnh ngụ tình của Nguyễn Du: Chiều hôm buông xuống, ánh tịch dương đỏ quạch nhuộm biển cả. "
            f"Từ lan can lầu Ngưng Bích, Kiều nhìn ra cửa biển thấy một cánh buồm nhỏ nhoi đơn độc lúc ẩn lúc hiện "
            f"nơi chân trời xa xăm, gợi nỗi nhớ cha mẹ già tựa cửa ngóng con. Tiếp đó là ngọn nước triều rút xiết cuộn, "
            f"cuốn theo những cánh hoa đào phai trôi man mác giữa dòng bọt sóng dập dềnh."
        )
        audio_stem1 = "Tiếng sáo trúc da diết cất lên điệu hò xa xứ, tiếng đàn tranh ngân nga sâu lắng."
        audio_stem2 = "Tiếng sóng biển chiều hôm rì rào, tiếng nước chảy cuồn cuộn qua khe đá."
        audio_stem3 = "Tiếng nước vỗ bì bõm, tiếng thở dài ngậm ngùi của Kiều."
        audio_stem4 = "Lời thơ V.O. ngâm vang: 'Buồn trông cửa bể chiều hôm... Buồn trông ngọn nước mới sa...'."
        prompt_en = (
            f"Poetic cinematic sequence, {framing}. Sunset ocean view from a high wooden pagoda balcony. In the far distance, "
            f"a tiny solitary wooden sail boat drifts at the horizon under a fiery dusk sky. Cut to turbulent coastal waters "
            f"where delicate pink peach blossom petals float aimlessly amidst foaming sea foam. Close-up on Thúy Kiều's eyes "
            f"brimming with homesickness and existential melancholy. Masterful literary visual metaphor. "
            f"Âm thanh: Tiếng sóng biển êm ả vỗ bờ lúc hoàng hôn, tiếng nước chảy xiết cuốn bọt sóng, tiếng thở dài man mác. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 13:
        # Tả cảnh ngụ tình II: Cỏ rầu rầu & Sóng gầm
        visual_vi = (
            f"Màn đêm buông xuống lầu Ngưng Bích. Dải cỏ ven biển úa màu 'rầu rầu' nối liền chân mây và mặt đất thành "
            f"một màu xanh xám tẻ nhạt vô tận. Gió bấc đột ngột gầm rú, mặt biển động dữ dội; từng đợt sóng bạc đầu chồm lên "
            f"đập vào vách đá gầm réo ầm ầm như chực cuốn phăng chiếc ghế nàng đang ngồi, báo hiệu định mệnh kinh hoàng sắp ập đến."
        )
        audio_stem1 = "Dàn trống và dàn dây nổi lên âm thanh gầm gào của định mệnh bão tố."
        audio_stem2 = "Tiếng gió biển gầm thét dữ dội, tiếng sóng biển đập vào vách đá ầm ầm rung chuyển lầu cao."
        audio_stem3 = "Tiếng khung cửa sổ gỗ rung lên bần bật trong cơn gió lốc."
        audio_stem4 = "Lời thơ V.O. trầm hùng vang vọng: 'Buồn trông gió cuốn mặt duềnh; Ầm ầm tiếng sóng kêu quanh ghế ngồi!'."
        prompt_en = (
            f"Dramatic atmospheric cinema shot, {framing}. Dark stormy twilight over Ngưng Bích Pavilion. The coastal dunes "
            f"stretch into a monotonous faded grayish-green under heavy brooding storm clouds. Fierce ocean waves crash violently "
            f"against the black sea cliff rocks below, sending towering white sprays into the air with roaring thunderous sound. "
            f"Thúy Kiều sits clutching the wooden arms of her chair, eyes wide with ominous premonition. "
            f"Âm thanh: Tiếng sóng gầm ầm ầm rung chuyển chân ghế, tiếng gió biển rít gào qua khe cửa gỗ, tiếng sấm xa. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 14:
        # Mũi tên bọc dải lụa đào & Sở Khanh
        visual_vi = (
            f"Một mũi tên bọc dải lụa đào bất ngờ bay vút qua khung cửa sổ cắm phập vào cột gỗ lầu Ngưng Bích! "
            f"Kiều mở ra thấy bức thư tình nét chữ rồng bay phượng múa ký tên Sở Khanh. Nhìn xuống bãi cát dưới lầu, "
            f"SỞ KHANH (25 tuổi, mặt hoa da phấn, nụ cười giả tạo hiệp sĩ, áo lụa thư sinh) đang cưỡng ngựa ngước nhìn lên "
            f"khoát tay ra hiệu hẹn ước cứu nàng vượt ngục đào thoát."
        )
        audio_stem1 = "Tiếng đàn tỳ bà gảy tiết tấu dồn dập, gieo niềm hy vọng le lói nhưng ẩn chứa sự hiểm độc."
        audio_stem2 = "Tiếng gió đêm rít nhẹ qua dải lụa đào bay phấp phới."
        audio_stem3 = "Tiếng mũi tên cắm phập vào cột gỗ, tiếng móng ngựa giậm trên cát mịn."
        audio_stem4 = "Tiếng Sở Khanh vọng lên thì thầm: 'Nàng hãy tin ta! Đêm nay ta mang ngựa đón nàng!'."
        prompt_en = (
            f"Cinematic suspense shot, {framing}. An arrow wrapped in crimson silk ribbon suddenly strikes into a dark wooden "
            f"pillar inside the pavilion. Thúy Kiều unrolls the silk letter with wide hopeful eyes. Below on the foggy sandy beach, "
            f"Sở Khanh (25yo handsome scholar, deceptive charming smile, riding a fine steed) signals to the balcony with a gallant gesture. "
            f"Moonlit atmosphere, dramatic tension, beautiful classical framing. "
            f"Âm thanh: Tiếng mũi tên xé gió cắm phập vào cột gỗ, tiếng dải lụa bay phần phật, tiếng ngựa thở phì phò dưới cát. "
            f"{AUDIO_GUARD}"
        )

    elif sc_num == 15:
        # Vượt tường & Cliffhanger bẫy đuốc đỏ
        visual_vi = (
            f"Đêm tối trời không một ánh sao. Sở Khanh đón Kiều vượt bức tường rào phía sau lầu Ngưng Bích. "
            f"Kiều ôm gói hành lý phi ngựa theo hắn vào rừng trúc rậm rạp hoang vu. Khi đến ngã ba bìa rừng hẻo lánh, "
            f"tiếng tù và bất ngờ rúc lên inh ỏi! Hàng chục ngọn đuốc đỏ rực bùng cháy chiếu sáng lóa cả khu rừng. "
            f"Sở Khanh đột ngột ghìm ngựa lùi lại, bật cười khẩy trơ tráo: 'Tú Bà tỷ tỷ! Con chim non đệ đã nộp tận tay nhé!'. "
            f"Tú Bà ung dung ngự trên kiệu sơn son cùng toán tay sai bặm trợn vây kín. Kiều đứng chết lặng giữa rừng đuốc đỏ."
        )
        audio_stem1 = "Dàn nhạc giao hưởng bùng nổ nhịp trống dồn dập, tiếng tù và sa trường rúc lên inh ỏi xé toạc màn đêm."
        audio_stem2 = "Tiếng gió rít qua rừng trúc xào xạc, tiếng chim đêm bay nháo nhác."
        audio_stem3 = "Tiếng đuốc reo bập bùng, tiếng móng ngựa phanh gấp cày xới đất bùn, tiếng gậy gộc gõ vào nhau đe dọa."
        audio_stem4 = "Tiếng cười nham hiểm của Sở Khanh và tiếng Tú Bà the thé đắc thắng."
        prompt_en = (
            f"Epic cinematic cliffhanger shot, {framing}. Pitch black night in a dense bamboo forest. Dozens of flaming red torches "
            f"erupt all around, illuminating the sinister trap. Sở Khanh smirking with a treacherous grin as he steps back towards "
            f"Madam Tú Bà sitting imperiously on an ornate palanquin surrounded by fierce armed thugs with wooden clubs. "
            f"In the center, Thúy Kiều (17yo, blue robe, clutching her travel bundle) stands frozen in absolute shock and despair. "
            f"Dynamic lighting from blazing fire torches, swirling smoke, heart-pounding dramatic cliffhanger climax. "
            f"Âm thanh: Tiếng tù và rúc vang dội xé màn đêm, tiếng đuốc cháy phừng phực bập bùng, tiếng cười hiểm độc của Sở Khanh. "
            f"{AUDIO_GUARD}"
        )

    return visual_vi, audio_stem1, audio_stem2, audio_stem3, audio_stem4, prompt_en, framing


def build_full_ep02():
    print("\n🎬 BẮT ĐẦU MỞ RỘNG KỊCH BẢN & BỘ PROMPT TẬP 2 LÊN 188 SHOTS CHUẨN HOLLYWOOD...")

    screenplay_lines = [
        "# KỊCH BẢN PHIM ĐIỆN ẢNH - TẬP 2: NỖI ĐAU BÁN MÌNH & CẠM BẪY LẦM THAN",
        "## DỰ ÁN AI CINEMA: THẬP NGŨ NIÊN (THE FIFTEEN SPRINGS)",
        "",
        "> **Tập phim**: Tập 2 / 6 Tập  ",
        "> **Thời lượng**: 29 Phút 40 Giây (188 Shots - Chuẩn Hollywood 3 Hồi)  ",
        "> **Mốc thời gian**: Năm thứ hai triều Gia Tĩnh (Thúy Kiều bước sang tuổi 17)  ",
        "> **Tác giả kiêm Chủ sở hữu IP**: **NGUYỄN SĨ SƠN** (08/08/1990, CCCD: 031090010018)  ",
        "> **Nguyên tác văn học**: *Đoạn Trường Tân Thanh (Truyện Kiều)* - Đại thi hào Nguyễn Du (Câu 0723 - Câu 1204, Public Domain)  ",
        "> **Đạo diễn & Biên kịch**: Ban Chỉ Đạo Nghệ Thuật THẬP NGŨ NIÊN  ",
        "> **Chuẩn kiểm duyệt**: 100% YouTube Green Dollar Compliance (Chiaroscuro Silhouette & Nature Metaphors)  ",
        "> **Quy chuẩn diễn xuất**: Anti-Male-Tears Directive (R4 - 0% nam nhân rơi lệ), Lip-Sync & Off-Screen Guard (R5)",
        "",
        "---",
        "",
        "### DANH SÁCH NHÂN VẬT TẬP 2 (CHARACTER ROSTER)",
        "1. **THÚY KIỀU (17 tuổi)**: Đại tiểu thư khuê các lưu lạc, nhan sắc nghiêng nước nghiêng thành, nếm trải nỗi đau tan nát cõi lòng khi trao duyên, bị bán vào thanh lâu, kiên cường giữ trọn nhân phẩm. Y phục: Áo lam lưu lạc, tóc rũ rượi, đôi mắt u sầu thăm thẳm. Chuẩn diễn xuất: Biểu cảm vi mô điện ảnh (Micro-expressions).",
        "2. **THÚY VÂN (16 tuổi)**: Người em gái nhận lời trao duyên trong nước mắt, gánh vác món nợ tình dang dở của chị. Y phục: Áo lụa trắng ngà thuần khiết, nét mặt phúc hậu đoan trang.",
        "3. **MÃ GIÁM SINH (45 tuổi)**: Tên buôn người giả danh giám sinh học trò huyện Lâm Tri, mặt mày nhẵn nhụi trơ trẽn, cử chỉ thô bỉ xấc xược, 'ngồi tót sỗ sàng'.",
        "4. **MỤ MỐI (50 tuổi)**: Mụ buôn phấn bán hương đon đả, khéo mồm ép giá, mắt đảo như rang lạc.",
        "5. **TÚ BÀ (50 tuổi)**: Chủ chứa lầu xanh Lâm Tri, mụ nạ dòng béo tốt mặt trét đầy bột phấn trắng bệch, áo lụa sặc sỡ, tham tiền độc ác.",
        "6. **SỞ KHANH (25 tuổi)**: Tên ma cà bông đội lốt thư sinh nghĩa hiệp, mặt hoa da phấn, nụ cười giả tạo hiểm độc, chuyên nghề dắt mối lừa gái lầu xanh.",
        "7. **VƯƠNG ÔNG (56 tuổi) & VƯƠNG QUAN (15 tuổi)**: Cha và em trai Kiều. **Tuân thủ tuyệt đối Anti-Male-Tears Directive (R4)**: Quai hàm bạnh chặt, ánh mắt trĩu nặng nhìn xuống, nén sâu cơn uất hận trượng phu, tuyệt đối không rơi một giọt lệ.",
        "8. **VƯƠNG BÀ (51 tuổi)**: Mẫu thân đau đớn nấc nghẹn tiễn con gái biệt xứ.",
        "9. **ĐÁM TAY SAI ĐAO GẬY, KỸ NỮ LẦU XANH, KHÁCH LÀNG CHƠI**.",
        "",
        "---",
        ""
    ]

    muse_prompts = {
        "episode": "ep02",
        "episode_num": 2,
        "project_name": "THẬP NGŨ NIÊN (THE FIFTEEN SPRINGS)",
        "ai_video_engine": "Muse.ai Headless Automation Engine",
        "version": "2.0-expanded-30m",
        "general_settings": {
            "aspect_ratio": "16:9",
            "resolution": "720p (1280x720)",
            "camera_lens": "Cinematic 35mm Anamorphic, soft natural bokeh",
            "color_grading": "Muted sorrowful tones, chiaroscuro contrast, historical Asian cinema texture",
            "audio_guard": AUDIO_GUARD
        },
        "motion_prompts": {}
    }

    banana_prompts = {
        "episode": "ep02",
        "project_name": "THẬP NGŨ NIÊN",
        "ai_image_engine": "Gemini Banana / Google Imagen 3",
        "master_style_anchor": "Vietnamese historical drama, cinematic chiaroscuro lighting, 720p 16:9",
        "prompts": {}
    }

    total_shots = 0

    for sc in SCENES_META:
        sc_num = sc["num"]
        sc_id = f"ep02_scene{sc_num:02d}"
        n_shots = sc["shots"]

        # Header for Act if first scene in Act
        if sc_num == 1:
            screenplay_lines.extend([
                "## HỒI 1: ĐÊM TRAO DUYÊN BẤT HỦ & BUỔI SÁNG PHƯỜNG BUÔN THỊT (00:00 - 10:00 | CẢNH 01 - CẢNH 05 | 68 SHOTS)",
                "",
                "---",
                ""
            ])
        elif sc_num == 6:
            screenplay_lines.extend([
                "## HỒI 2: BIỆT LY QUAN SAN, GIÔNG TỐ ĐẦU ĐỜI & LẦU XANH LÂM TRI (10:00 - 20:00 | CẢNH 06 - CẢNH 10 | 60 SHOTS)",
                "",
                "---",
                ""
            ])
        elif sc_num == 11:
            screenplay_lines.extend([
                "## HỒI 3: LẦU NGƯNG BÍCH KHÓA XUÂN, BỐN TẦNG SẦU MUỘN & BẪY ĐÊM RỪNG TRÚC (20:00 - 29:40 | CẢNH 11 - CẢNH 15 | 60 SHOTS)",
                "",
                "---",
                ""
            ])

        screenplay_lines.extend([
            f"#### {sc['title'].upper()} ({n_shots} SHOTS - {n_shots*10//60}M{n_shots*10%60:02d}S)",
            f"- **Slugline**: `{sc['slug']}`",
            f"- **Thời lượng**: {n_shots * 10} Giây ({n_shots} Shots x 10s: `{sc_id}_shot01` -> `{sc_id}_shot{n_shots:02d}`)",
            f"- **Bối cảnh**: {sc['loc']}",
            f"- **Nhân vật**: {sc['chars']}",
            f"- **Mục tiêu tự sự**: {sc['theme']}",
            ""
        ])

        for s_idx in range(1, n_shots + 1):
            total_shots += 1
            shot_id = f"{sc_id}_shot{s_idx:02d}"
            v_vi, a_s1, a_s2, a_s3, a_s4, p_en, framing = generate_shot_details(sc, s_idx)

            screenplay_lines.extend([
                f"##### Shot {s_idx:02d}: `{shot_id}` (10s)",
                f"- **Cỡ cảnh & Máy quay**: {framing}.",
                f"- **Thị giác**: {v_vi}",
                f"- **Âm thanh 4 Stems**:",
                f"  - *Stem 1 (BGM)*: {a_s1}",
                f"  - *Stem 2 (Ambience)*: {a_s2}",
                f"  - *Stem 3 (Foley)*: {a_s3}",
                f"  - *Stem 4 (Vocal)*: {a_s4}",
                f"- **Muse.ai Motion Prompt**:",
                f"  > `{p_en}`",
                ""
            ])

            # Reference start frame logic
            ref_sf = f"04_Assets/keyframes/{sc_id}_shot{s_idx-1:02d}/clean_frame_239.jpg" if s_idx > 1 else f"04_Assets/keyframes/{sc_id}_shot01/start_frame_720p.png"
            char_ref = f"04_Assets/characters/thuy_kieu/thuy_kieu_720p.png (blended with 04_Assets/backgrounds/{sc_id}_bg.png, keyframes)"

            muse_prompts["motion_prompts"][shot_id] = {
                "scene_id": sc_id,
                "shot_id": shot_id,
                "scene_title": sc["title"],
                "duration_sec": 10,
                "aspect_ratio": "16:9",
                "framing": framing,
                "character_asset_ref": char_ref,
                "reference_start_frame": ref_sf,
                "motion_prompt": p_en
            }

            banana_prompts["prompts"][shot_id] = {
                "shot_id": shot_id,
                "framing": framing,
                "description": v_vi,
                "prompt": f"Vietnamese historical cinema still, 16:9, 720p. {v_vi}. Cinematic lighting, authentic 16th century costume."
            }

    # Write out screenplay.md
    SCREENPLAY_PATH.write_text("\n".join(screenplay_lines), encoding="utf-8")
    print(f"✓ Đã ghi kịch bản phân cảnh hoàn chỉnh: {SCREENPLAY_PATH.relative_to(BASE_DIR)} ({SCREENPLAY_PATH.stat().st_size // 1024} KB)")

    # Write out muse_prompts.json
    MUSE_PROMPTS_PATH.write_text(json.dumps(muse_prompts, ensure_ascii=False, indent=2), encoding="utf-8")
    print(f"✓ Đã ghi bộ Motion Prompts Muse: {MUSE_PROMPTS_PATH.relative_to(BASE_DIR)} ({len(muse_prompts['motion_prompts'])} shots)")

    # Write out banana_prompts.json
    BANANA_PROMPTS_PATH.write_text(json.dumps(banana_prompts, ensure_ascii=False, indent=2), encoding="utf-8")
    print(f"✓ Đã ghi bộ Image Prompts Banana: {BANANA_PROMPTS_PATH.relative_to(BASE_DIR)} ({len(banana_prompts['prompts'])} shots)")

    # Update manifest.json
    sys.path.append(str(BASE_DIR / "05_Production_Pipeline"))
    from episode_manager import get_episode_assets_manifest
    manifest = get_episode_assets_manifest("ep02", muse_prompts["motion_prompts"])
    MANIFEST_PATH.write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
    print(f"✓ Đã cập nhật manifest.json cho Tập 2! (Tổng số shot: {total_shots})")

if __name__ == "__main__":
    build_full_ep02()
