#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
=============================================================================
GENERATOR: EPISODE 04 FULL HOLLYWOOD 30-MIN SCREENPLAY & 188 MUSE PROMPTS
=============================================================================
Tập 4: HOÀNH ĐAO TRẢM LÃNG (BẺ KHÓA VƯỢT RÀO & OAI DANH TỪ HẢI)
(188 Shots / 15 Cảnh / 3 Hồi chuẩn Hollywood)
Bám sát nguyên tác câu 1989 - 2314 của Nguyễn Du:
- Hồi 1 (Cảnh 01 - 05, 68 shots): Bẻ khóa đêm mưa, cửa Phật Giác Duyên & cạm bẫy Bạc Hạnh
- Hồi 2 (Cảnh 06 - 10, 60 shots): Thanh lâu Châu Thai, Từ Hải xuất hiện & khúc đàn tri kỷ anh hùng
- Hồi 3 (Cảnh 11 - 15, 60 shots): Xuất quân xưng bá, vinh quy bái tổ & trao gươm lệnh trên kỳ đài
=============================================================================
"""

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"
EP04_DIR = EPISODES_DIR / "ep04"
PROMPTS_DIR = EP04_DIR / "prompts"
SCREENPLAY_PATH = EP04_DIR / "screenplay.md"
MUSE_PROMPTS_PATH = PROMPTS_DIR / "muse_prompts.json"
BANANA_PROMPTS_PATH = PROMPTS_DIR / "banana_prompts.json"
MANIFEST_PATH = EP04_DIR / "manifest.json"

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

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. QUAN AM PAVILION - STORMY NIGHT",
        "title": "Cảnh 01: Quan Âm Các đêm giông bão - Tiếng mõ kinh kệ & Nỗi lo âu miệng vực",
        "act": 1, "loc": "Gác Quan Âm tĩnh mịch sau hoa viên phủ Hoạn Thư, tượng Phật bà, bàn viết chữ Hán, chuông mõ",
        "chars": "Thúy Kiều (21t, áo lam nâu sồng)",
        "theme": "Kiều miệt mài chép kinh Bát Nhã, thấu suốt hiểm nguy từ ánh mắt Hoạn Thư, quyết định đào thoát."
    },
    {
        "num": 2, "shots": 14, "slug": "INT./EXT. GARDEN WALL - MIDNIGHT RAINSTORM",
        "title": "Cảnh 02: Bẻ khóa chuông vàng - Vượt tường hoa trốn chạy trong đêm mưa",
        "act": 1, "loc": "Bàn thờ Phật gác chuông, cửa sổ then gỗ, bức tường hoa phủ gai góc, đường phố Vô Tích mưa gió",
        "chars": "Thúy Kiều (21t)",
        "theme": "Lấy chuông vàng khánh bạc làm lộ phí, cạy then vượt tường gai, lao vào màn mưa đen kịt trốn chạy."
    },
    {
        "num": 3, "shots": 14, "slug": "EXT./INT. CHIEU AN TEMPLE - DAWN / DUSK",
        "title": "Cảnh 03: Am tự Chiêu Ẩn - Cửa Phật Giác Duyên & Nỗi sợ gia huy Thượng thư",
        "act": 1, "loc": "Cổng chùa mái lá thanh tịnh ven rừng, chánh điện mộc mạc sư Giác Duyên",
        "chars": "Thúy Kiều (21t), Sư Giác Duyên (48t, đạo mạo từ bi)",
        "theme": "Kiều nương bóng cửa thiền, Giác Duyên thấy gia huy Thượng thư trên khánh bạc sợ liên lụy nên gửi gắm đi."
    },
    {
        "num": 4, "shots": 12, "slug": "INT. BAC BA COASTAL HOUSE - DAY",
        "title": "Cảnh 04: Nhà Bạc Bà ven biển - Lời thề thốt ve vãn của Bạc Hạnh",
        "act": 1, "loc": "Căn nhà tranh ven làng chài, lưới đánh cá, bàn trà mộc mạc",
        "chars": "Thúy Kiều (21t), Bạc Bà (50t), Bạc Hạnh (26t, tên ma cô buôn người mồm mép)",
        "theme": "Bạc Hạnh giở trò đường mật xin cưới Kiều làm vợ, Kiều ngây thơ tin tưởng gật đầu bước lên thuyền."
    },
    {
        "num": 5, "shots": 16, "slug": "EXT./INT. COASTAL PORT CHAU THAI - DUSK",
        "title": "Cảnh 05: Cập bến Châu Thai - Lật mặt buôn người & Kiều tái sa thanh lâu lần hai",
        "act": 1, "loc": "Bến cảng biển Châu Thai tấp nập, thanh lâu lộng lẫy nhơ nhuốc, bến thuyền",
        "chars": "Thúy Kiều (21t), Bạc Hạnh, Mụ chủ chứa Châu Thai",
        "theme": "Bạc Hạnh bán đứt Kiều lấy bạc trắng; Kiều bàng hoàng nhận ra 'Thanh lâu hai lượt thanh y hai lần'."
    },
    {
        "num": 6, "shots": 12, "slug": "INT. CHAU THAI BROTHEL - NIGHT",
        "title": "Cảnh 06: Bùn nhơ Châu Thai - Đàn tỳ bà ôm sầu giữa cõi trần",
        "act": 2, "loc": "Phòng khách thanh lâu Châu Thai, khói thuốc hương trầm rẻ tiền, khách làng chơi phàm phu",
        "chars": "Thúy Kiều (21t, áo lụa sầu muộn), Đám khách làng chơi",
        "theme": "Tâm hồn Kiều chai sạn trước tiếng cười mua vui rẻ mạt, ngồi ôm cây đàn tỳ bà cũ trong góc tối."
    },
    {
        "num": 7, "shots": 14, "slug": "INT. CHAU THAI BROTHEL - DUSK",
        "title": "Cảnh 07: Râu hùm hàm én mày ngài - Từ Hải sải bước vào thanh lâu",
        "act": 2, "loc": "Cửa chính đại sảnh lầu xanh, thềm đá, ánh hoàng hôn chiếu rọi vóc dáng tráng sĩ",
        "chars": "Từ Hải (32t, thân mười thước cao, vai năm tấc rộng, đại anh hào cái thế), Thúy Kiều",
        "theme": "Sự xuất hiện chấn động địa cầu của Từ Hải, sải bước tựa sấm ran, ánh mắt quét thẳng tới góc phòng Kiều."
    },
    {
        "num": 8, "shots": 12, "slug": "INT. BROTHEL BANQUET - NIGHT",
        "title": "Cảnh 08: Khúc đàn tri kỷ anh hùng - Tiếng gươm đao sa trường thức tỉnh hùng tâm",
        "act": 2, "loc": "Bàn tiệc rượu thanh lâu, đàn tỳ bà cổ phong, chén rượu lớn",
        "chars": "Từ Hải (32t), Thúy Kiều (21t)",
        "theme": "Kiều gảy khúc đàn biến thành bản tráng ca cuồn cuộn sóng biển sa trường, Từ Hải vỗ bàn cười lớn đón nhận tri kỷ."
    },
    {
        "num": 9, "shots": 10, "slug": "INT./EXT. BROTHEL MAIN GATE - NIGHT",
        "title": "Cảnh 09: Vung gươm lệnh chi tiền ngàn - Giải phóng hồng nhan khỏi bùn nhơ",
        "act": 2, "loc": "Cửa thanh lâu Châu Thai, túi bạc nén rực rỡ, đoàn ngựa chiến quân doanh",
        "chars": "Từ Hải (32t), Thúy Kiều, Mụ chủ chứa Châu Thai (run rẩy khiếp đảm)",
        "theme": "Từ Hải ném túi bạc vạn vung kiếm lệnh chuộc Kiều, đưa nàng cưỡi chiến mã về quân doanh."
    },
    {
        "num": 10, "shots": 12, "slug": "EXT. MILITARY CAMP CENTRAL PAVILION - SUNSET",
        "title": "Cảnh 10: Đại hôn quân doanh - Vạn tinh binh tung hô đón tân phu nhân",
        "act": 2, "loc": "Đại bản doanh quân đội Từ Hải, cờ phướn rợp trời, hàng vạn chiến binh gươm giáo sáng lòa",
        "chars": "Từ Hải, Thúy Kiều (áo lụa đỏ trang nghiêm), Các tướng lĩnh sa trường",
        "theme": "Lễ đại hôn hào hùng trước vạn quân sĩ, phẩm giá khuê các của Kiều được tôn vinh lên hàng vương phi."
    },
    {
        "num": 11, "shots": 12, "slug": "EXT. COASTAL CLIFF WATCHTOWER - DAWN",
        "title": "Cảnh 11: Nửa năm hương lửa mặn nồng - Trông vời trời bể mênh mang",
        "act": 3, "loc": "Vọng gác quân doanh nhìn ra biển cả bao la ngập tràn nắng sớm, chiến mã, đại kỳ",
        "chars": "Từ Hải (33t), Thúy Kiều (22t)",
        "theme": "Chí lớn trượng phu động lòng bốn phương; biển rộng trời cao giục giã cánh chim đại bàng tung cánh."
    },
    {
        "num": 12, "shots": 12, "slug": "EXT. CAMP GATE - MORNING",
        "title": "Cảnh 12: Biệt ly xuất quân - Mười vạn tinh binh & Thanh gươm yên ngựa thẳng rong",
        "act": 3, "loc": "Cổng doanh trại quân đội, cát bụi sa trường, đoàn tùy tùng, chiến mã đen tuyền",
        "chars": "Từ Hải (Anti-Male-Tears: ánh mắt cương nghị rực lửa, quai hàm bạnh chặt), Thúy Kiều",
        "theme": "Lời ước hẹn một năm mang mười vạn tinh binh đón rước vinh quy; Từ Hải vung gươm phi ngựa vào cát bụi."
    },
    {
        "num": 13, "shots": 12, "slug": "EXT. BATTLEFIELDS & SEAPORT TOWNS - DAY / DUSK",
        "title": "Cảnh 13: Bão táp khởi nghĩa - Chiếm năm huyện sáu thành, xưng vương góc trời",
        "act": 3, "loc": "Chiến trường duyên hải, thành trì triều đình sụp đổ, ngọn cờ chữ 'TỪ' tung bay ngút ngàn",
        "chars": "Từ Hải (thống lĩnh đại quân cưỡi ngựa chém tướng), Đoàn tinh binh khởi nghĩa",
        "theme": "Quân Từ Hải đánh đâu thắng đó, đập tan quan quân hủ bại, thiết lập giang sơn độc lập tự do."
    },
    {
        "num": 14, "shots": 10, "slug": "EXT. COASTAL PORT CEREMONY - SUNNY AUTUMN DAY",
        "title": "Cảnh 14: Đoàn chiến thuyền vinh quy bái tổ - Kiệu hoa phượng hoàng đón Kiều",
        "act": 3, "loc": "Bến cảng biển rực rỡ cờ hoa, kiệu phượng hoàng dát vàng, muôn cân gấm vóc lễ vật",
        "chars": "Thúy Kiều (khoác áo phu nhân đỏ thêu phượng hoàng, mũ miện ngọc trai), Đoàn hộ tống",
        "theme": "Đoàn chiến thuyền rước Kiều về đại bản doanh trong tiếng kèn trống rền vang sông nước."
    },
    {
        "num": 15, "shots": 14, "slug": "EXT. GRAND MILITARY PODIUM - GOLDEN HOUR DUSK",
        "title": "Cảnh 15: Trao gươm lệnh trên kỳ đài - Cliffhanger đoàn tội nhân quỳ chờ phán quyết",
        "act": 3, "loc": "Kỳ đài quân doanh trung quân nguy nga, gươm giáo sáng lòa, sân khấu quân pháp trang nghiêm",
        "chars": "Từ Hải (trao kiếm lệnh), Thúy Kiều, Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh, Thúc Sinh, Hoạn Thư",
        "theme": "Từ Hải trao gươm lệnh cho Kiều định đoạt ân oán; đoàn kẻ thù và ân nhân quỳ rạp chờ phán quyết sinh tử."
    }
]

def generate_ep04_shot_details(sc, s_idx):
    sc_num = sc["num"]
    sid = f"ep04_scene{sc_num:02d}_shot{s_idx:02d}"

    framings = [
        "Toàn cảnh đại cảnh sử thi (Epic Wide Establishing Shot)",
        "Trung cảnh chuyển động oai phong (Medium Dynamic Tracking)",
        "Trung cận biểu cảm vi mô (Medium Close-Up - MCU)",
        "Cận cảnh gương mặt sắc sảo (Close-Up Facial Detail)",
        "Cận cảnh thanh bảo kiếm / chuông vàng (Detail Prop Close-Up)",
        "Cực cận ánh mắt rực lửa anh hùng (Extreme Close-Up - ECU Eyes)",
        "Góc máy thấp tôn vinh tầm vóc (Low Angle Heroic Framing)",
        "Góc máy qua vai kịch tính (Over The Shoulder - OTS)",
        "Toàn cảnh sa trường / biển cả (Panoramic Epic Landscape)",
        "Cận cảnh trượt chậm tiến lại (Slow Dolly In MCU)",
        "Toàn cảnh quân doanh cờ bay (Military Camp Wide Scene)",
        "Góc máy chéo nghiêng dồn dập (Dutch Angle Action)",
        "Góc máy cận khóa khẩu hình (Direct Profile Close-Up)",
        "Cận cảnh tĩnh lặng đoan trang (Static Contemplative Close-Up)",
        "Toàn cảnh kết nối Head-Tail (Continuous Transition Wide Shot)",
        "Toàn cảnh hoàng hôn sa trường (Golden Hour Sunset Wide)"
    ]
    framing = framings[(s_idx - 1) % len(framings)]

    if sc_num == 7:
        v_vi = (
            f"Cửa chính thanh lâu Châu Thai bỗng rung chuyển. TỪ HẢI (32 tuổi, thân cao mười thước, vai rộng năm tấc, "
            f"râu hùm hàm én mày ngài, đại anh hào cái thế) sải bước bước vào thềm đá. Ánh hoàng hôn chiều tà chiếu rọi "
            f"tấm lưng vạm vỡ như bàn thạch, thanh bảo kiếm bên hông sáng lóa. Ánh mắt chàng quét thẳng qua đám kỹ nữ, "
            f"dừng lại tại góc phòng tối nơi Thúy Kiều đang ôm đàn tỳ bà."
        )
        a_s1 = "Tiếng trống trận dồn vang rền dập, dàn kèn đồng cất lên giai điệu hào sảng lẫm liệt."
        a_s2 = "Tiếng gió lùa qua cửa đại sảnh, tiếng ồn ào xung quanh bỗng chốc im bặt kinh ngạc."
        a_s3 = "Tiếng bước chân nặng trịch uy dũng nện trên sàn đá, tiếng bao kiếm va chạm lách cách đanh thép."
        a_s4 = "Tiếng Từ Hải cất lên sấm ran: 'Từ mỗ muốn được nghe một khúc đàn của bậc hồng nhan tri kỷ!'."
        p_en = (
            f"Epic historical cinema shot, {framing}. The grand entrance of heroic general Từ Hải (32yo, towering majestic presence, "
            f"broad shoulders, square jaw, noble tiger beard, magnificent traditional leather and iron armor with flowing red cape). "
            f"He steps firmly through the arched doorway of a coastal brothel hall, back-lit by blazing golden hour sunset. "
            f"His piercing eyes focus intently across the room towards Thúy Kiều. Masterclass cinematic heroism, 35mm film texture. "
            f"Âm thanh: Tiếng bước chân nặng như đúc nện trên sàn đá hoa cương, tiếng bao kiếm va lách cách kim khí, tiếng cười sảng khoái. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 8:
        v_vi = (
            f"Dưới ánh mắt rực lửa của Từ Hải, mười ngón tay Kiều đặt lên phím đàn tỳ bà. Tiếng đàn cất lên không còn là khúc "
            f"sầu thương ủy mị, mà hóa thành bản tráng ca cuồn cuộn sóng gầm ngoài biển lớn, âm vang tiếng gươm đao va chạm "
            f"giữa sa trường. Từ Hải ngửa đầu uống cạn chén rượu lớn, ánh mắt bừng sáng tri âm, vỗ mạnh bàn cười vang: "
            f"'Nàng sinh ra là để làm phu nhân của Từ Hải!'."
        )
        a_s1 = "Khúc đàn tỳ bà anh hùng tráng lệ dồn dập như ngàn vạn chiến mã phi nước đại ngoài trận địa."
        a_s2 = "Tiếng sóng biển gầm réo ngoài bến cảng phụ họa theo từng nhịp phím đàn."
        a_s3 = "Tiếng móng gảy đàn tỳ bà sắc sảo ròn rã, tiếng bát rượu dập mạnh xuống mặt bàn gỗ son."
        a_s4 = "Tiếng Từ Hải cười vang rền như chuông đồng: 'Tuyệt thay! Nàng chính là tri kỷ của ta!'."
        p_en = (
            f"Dynamic cinema scene, {framing}. Thúy Kiều (21yo, refined Vietnamese beauty with fiery renewed spirit in her eyes) "
            f"passionately playing an ancient pipa lute, her delicate hands moving with lightning virtuosity. "
            f"Across from her, heroic general Từ Hải listens with intense admiration, raising a large ceramic wine bowl in salute. "
            f"Warm candlelight and shadows dancing on traditional carved screen walls. Epic poetic connection between two souls. "
            f"Âm thanh: Tiếng đàn tỳ bà réo rắt dồn dập như vó ngựa sa trường, tiếng rượu tràn ra mặt bàn, tiếng cười vang dội. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 12:
        v_vi = (
            f"Cổng đại bản doanh sớm mai. Từ Hải khoác chiến bào đen thêu kim tuyến, thanh bảo kiếm lệnh dắt ngang lưng. "
            f"Trước khi nhảy lên lưng hắc mã, chàng cầm chặt đôi bàn tay Kiều: 'Nàng đợi ta một năm, mười vạn tinh binh đón rước!'. "
            f"Từ Hải giữ trọn phong thái trượng phu khắc kỷ (Anti-Male-Tears: ánh mắt cương nghị rực lửa, quai hàm bạnh chặt, "
            f"tuyệt đối không rơi lệ). Chàng vung kiếm lệnh, thúc ngựa phi như bay vào cát bụi mù mịt."
        )
        a_s1 = "Dàn nhạc giao hưởng dâng tràn khúc xuất quân hào sảng, tiếng chiêng đồng ngân vang rền trời."
        a_s2 = "Tiếng gió sớm thổi tung cờ xí đại bản doanh, tiếng chim đại bàng chao lượn trên trời xanh."
        a_s3 = "Tiếng chiến mã hí vang rền, tiếng móng sắt giậm tung cát bụi, tiếng roi ngựa vút dứt khoát."
        a_s4 = "Tiếng Từ Hải đanh thép: 'Trượng phu thanh gươm yên ngựa thẳng rong! Nàng hãy đợi ta!'."
        p_en = (
            f"Heroic farewell cinema shot, {framing}. General Từ Hải mounting his majestic black warhorse at dawn. "
            f"He wears dark lacquered iron battle armor with a golden dragon motif, holding the reins with fierce stoic determination "
            f"(anti-male-tears: rock-solid jaw, resolute gaze, dignified feudal warrior spirit). Thúy Kiều (22yo, noble red silk robe) "
            f"watches him from the fortress gates as wind whips the battalion flags. "
            f"Âm thanh: Tiếng ngựa hí vang trời, tiếng cờ vải phần phật trong gió sớm, tiếng vó ngựa phi nước đại rầm rập. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 15:
        v_vi = (
            f"Kỳ đài quân doanh nguy nga giữa hoàng hôn rực lửa. Kiều khoác áo phu nhân gấm đỏ thêu phượng hoàng hoàng kim, "
            f"đầu đội mũ miện ngọc trai, oai phong đứng cạnh Từ Hải trước vạn tinh binh đang quỳ rạp tung hô. "
            f"Từ Hải rút thanh bảo kiếm lệnh khảm ngọc sáng lóa trao tận tay Kiều: 'Công lý hôm nay trao vào tay nàng định đoạt!'. "
            f"Phía dưới kỳ đài, đoàn tội nhân bị trói gô giải lên: Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh... "
            f"cùng Thúc Sinh và Hoạn Thư đang run rẩy quỳ gối chờ phán quyết sinh tử!"
        )
        a_s1 = "Dàn nhạc giao hưởng quân đội bùng nổ nhịp trống trận uy nghi, tiếng kèn đồng vang rền dậy trời đất."
        a_s2 = "Tiếng gió hoàng hôn thổi tung tà áo gấm phượng hoàng, tiếng quân reo hò rền vang như sấm dậy."
        a_s3 = "Tiếng lưỡi gươm lệnh tuốt khỏi vỏ kêu 'xoẹt' sắc lạnh, tiếng xích sắt xiềng xích của đoàn tù nhân kéo lê."
        a_s4 = "Tiếng Từ Hải vang dội như lệnh trời: 'Phu nhân! Mọi ân oán xưa kia, xin trao nàng toàn quyền xử trí!'."
        p_en = (
            f"Epic season climax cliffhanger, {framing}. Magnificent military court platform at sunset. General Từ Hải presents "
            f"an ornate gem-encrusted ceremonial sword of supreme justice to Thúy Kiều, who stands regal and commanding in imperial crimson "
            f"and gold phoenix silk robes and pearl headdress. Thousands of armed soldiers kneel in disciplined formation below. "
            f"At the base of the platform, bound in chains, kneel her past oppressors—Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh, "
            f"along with Thúc Sinh and trembling Lady Hoạn Thư—awaiting judgment. Masterpiece composition, thrilling climax. "
            f"Âm thanh: Tiếng kiếm rút khỏi vỏ kim khí sắc bén vang vọng, tiếng xích sắt loảng xoảng, tiếng vạn quân hô vang dậy đất. "
            f"{AUDIO_GUARD}"
        )
    else:
        v_vi = (
            f"{sc['title']}. {sc['loc']}. Bối cảnh thời Gia Tĩnh thế kỷ 16. "
            f"Nhân vật {sc['chars']} thể hiện khí chất và hành động kịch tính, trang phục cổ phong chuẩn xác."
        )
        a_s1 = "Dàn nhạc giao hưởng ngũ cung cổ phong nâng đỡ cảm xúc phân cảnh."
        a_s2 = "Âm cảnh môi trường thiên nhiên chân thực, tiếng gió, tiếng sóng nước hoặc âm thanh quân trại."
        a_s3 = "Tiếng bước chân, tiếng xào xạc y phục và đạo cụ tương tác sắc nét."
        a_s4 = "Thoại nhân vật biểu cảm tự nhiên, khóa khẩu hình khi có thoại ngoài khung."
        p_en = (
            f"Vietnamese historical cinema still, {framing}. {sc['title']}. Set in {sc['loc']}. "
            f"Characters {sc['chars']} in authentic 16th century costume. "
            f"Cinematic chiaroscuro, natural textures, rich atmospheric grading. "
            f"Âm thanh: Âm thanh môi trường tự nhiên, tiếng gió thoang thoảng, tiếng bước chân. "
            f"{AUDIO_GUARD}"
        )

    return v_vi, a_s1, a_s2, a_s3, a_s4, p_en, framing


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

    screenplay_lines = [
        "# KỊCH BẢN PHIM ĐIỆN ẢNH - TẬP 4: HOÀNH ĐAO TRẢM LÃNG & OAI DANH TỪ HẢI",
        "## DỰ ÁN AI CINEMA: THẬP NGŨ NIÊN (THE FIFTEEN SPRINGS)",
        "",
        "> **Tập phim**: Tập 4 / 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ứ sáu đến năm thứ bảy triều Gia Tĩnh (Thúy Kiều từ 21 đến 22 tuổi)  ",
        "> **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 1989 - Câu 2314, 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 & Epic Historical Grandeur)  ",
        "> **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 4 (CHARACTER ROSTER)",
        "1. **THÚY KIỀU (21 - 22 tuổi)**: Từ đỉnh sâu nhục nhằn lầu xanh lần thứ hai bước lên ngôi vị Vương phi uy nghiêm lộng lẫy, tài hoa đàn tỳ bà trở thành khúc tráng ca tri kỷ anh hùng. Y phục: Áo lam nâu sồng -> Áo lụa Châu Thai -> Áo gấm đỏ phượng hoàng hoàng kim lộng lẫy.",
        "2. **TỪ HẢI (32 - 33 tuổi)**: Bậc đại anh hùng cái thế 'đầu đội trời chân đạp đất', râu hùm hàm én mày ngài, vai năm tấc rộng thân mười thước cao. **Tuân thủ tuyệt đối Anti-Male-Tears Directive (R4)**: Ánh mắt cương nghị rực lửa, quai hàm bạnh chặt, tiếng cười vang rền tựa chuông đồng, không bao giờ rơi lệ.",
        "3. **SƯ GIÁC DUYÊN (48 tuổi)**: Trụ trì am Chiêu Ẩn, đôn hậu từ bi nhưng sợ vòng lao lý quan nha.",
        "4. **BẠC BÀ & BẠC HẠNH (50t & 26t)**: Phường buôn người nham hiểm mồm mép, lừa cưới gạt bán Kiều vào lầu xanh Châu Thai.",
        "5. **MỤ CHỦ CHỨA CHÂU THAI**: Chủ nhà chứa vùng duyên hải tham tiền độc ác.",
        "6. **HOẠN THƯ & THÚC SINH**: Bị áp giải ra kỳ đài chờ phán quyết.",
        "7. **ĐOÀN TỘI NHÂN**: Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh bị trói gô xiềng xích.",
        "8. **VẠN QUÂN KHỞI NGHĨA TỪ HẢI, ĐOÀN TÙY TÙNG THUYỀN CHIẾN**.",
        "",
        "---",
        ""
    ]

    muse_prompts = {
        "episode": "ep04",
        "episode_num": 4,
        "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, epic wide depth of field",
            "color_grading": "Epic heroic tones, golden hour warmth, intense chiaroscuro contrast",
            "audio_guard": AUDIO_GUARD
        },
        "motion_prompts": {}
    }

    banana_prompts = {
        "episode": "ep04",
        "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"ep04_scene{sc_num:02d}"
        n_shots = sc["shots"]

        # Act headers
        if sc_num == 1:
            screenplay_lines.extend([
                "## HỒI 1: BẺ KHÓA ĐÊM MƯA, CỬA PHẬT & CẠM BẪY BẠC HẠNH (00:00 - 10:00 | CẢNH 01 - CẢNH 05 | 68 SHOTS)",
                "",
                "---",
                ""
            ])
        elif sc_num == 6:
            screenplay_lines.extend([
                "## HỒI 2: TÁI NGỤC CHÂU THAI & SỰ XUẤT HIỆN CÁI THẾ TỪ HẢI (10:00 - 20:00 | CẢNH 06 - CẢNH 10 | 60 SHOTS)",
                "",
                "---",
                ""
            ])
        elif sc_num == 11:
            screenplay_lines.extend([
                "## HỒI 3: XUẤT QUÂN XƯNG BÁ, ĐẠI BẢN DOANH & GƯƠM LỆNH KỲ ĐÀI (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_ep04_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}`",
                ""
            ])

            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."
            }

    SCREENPLAY_PATH.write_text("\n".join(screenplay_lines), encoding="utf-8")
    print(f"✓ Đã ghi kịch bản phân cảnh Tập 4: {SCREENPLAY_PATH.relative_to(BASE_DIR)} ({SCREENPLAY_PATH.stat().st_size // 1024} KB)")

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

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

    sys.path.append(str(BASE_DIR / "05_Production_Pipeline"))
    from episode_manager import get_episode_assets_manifest
    manifest = get_episode_assets_manifest("ep04", 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 4! (Tổng số shot: {total_shots})")

if __name__ == "__main__":
    build_full_ep04()
