#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
=============================================================================
GENERATOR: EPISODE 05 FULL HOLLYWOOD 30-MIN SCREENPLAY & 188 MUSE PROMPTS
=============================================================================
Tập 5: ĐOẠN TRƯỜNG THẬP NGŨ (BÁO ÂN BÁO OÁN & CẠM BẪY GIANG SƠN)
(188 Shots / 15 Cảnh / 3 Hồi chuẩn Hollywood)
Bám sát nguyên tác câu 2315 - 2530 của Nguyễn Du:
- Hồi 1 (Cảnh 01 - 06, 76 shots): Phiên tòa công lý oanh liệt, báo ân Thúc Sinh & Giác Duyên, 
                                  trừng trị lũ buôn người, tha bổng Hoạn Thư.
- Hồi 2 (Cảnh 07 - 10, 49 shots): Đêm thanh bình trướng doanh & mưu độc chiêu an của cáo già Hồ Tôn Hiến.
- Hồi 3 (Cảnh 11 - 15, 63 shots): Kiều khuyên Từ Hải dứt binh đao, đại lễ quy hàng & chén rượu mai phục.
=============================================================================
"""

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"
EP05_DIR = EPISODES_DIR / "ep05"
PROMPTS_DIR = EP05_DIR / "prompts"
SCREENPLAY_PATH = EP05_DIR / "screenplay.md"
MUSE_PROMPTS_PATH = PROMPTS_DIR / "muse_prompts.json"
BANANA_PROMPTS_PATH = PROMPTS_DIR / "banana_prompts.json"
MANIFEST_PATH = EP05_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./EXT. GRAND COMMAND TENT - DAY",
        "title": "Cảnh 01: Oai nghiêm trướng hùm - Kiều ngự sập gụ phượng hoàng, Từ Hải trao ấn kiếm",
        "act": 1, "loc": "Trướng hùm trung quân nguy nga giữa đại bản doanh, cờ lệnh tung bay, hai hàng tướng sĩ khoác giáp sáng lòa",
        "chars": "Thúy Kiều (24t, áo gấm đỏ thêu phượng hoàng hoàng kim, mũ miện ngọc trai), Từ Hải (34t, giáp trụ uy dũng), Võ tướng",
        "theme": "Từ Hải trao quyền phán xét tối cao cho phu nhân; oai linh nữ chủ chấn động trung quân."
    },
    {
        "num": 2, "shots": 12, "slug": "INT. GRAND COMMAND TENT - DAY",
        "title": "Cảnh 02: Báo ân Thúc Sinh - Trăm lạng vàng ròng nghìn xúc gấm & Chàng Thúc sụp lạy",
        "act": 1, "loc": "Thềm ngọc trướng hùm, rương vàng ròng lấp lánh, cuộn gấm vóc quý giá",
        "chars": "Thúy Kiều (24t, ánh mắt bao dung nhân hậu), Thúc Sinh (28t, sợ hãi run rẩy rồi nghẹn ngào sụp lạy cảm kích)",
        "theme": "Kiều tri ân tấm lòng nghĩa hiệp chuộc nàng khỏi thanh lâu năm xưa, ban thưởng hậu hĩnh và dặn dò trở về Vô Tích."
    },
    {
        "num": 3, "shots": 12, "slug": "INT. GRAND COMMAND TENT - DAY",
        "title": "Cảnh 03: Báo ân Sư Giác Duyên & Bà Quản gia Hoạn Phủ - Đền đáp bát cơm manh áo",
        "act": 1, "loc": "Trước sập gụ trướng hùm, bàn trà sứ cổ, mâm bạc quà tặng",
        "chars": "Thúy Kiều, Sư Giác Duyên (50t, áo nâu thanh đạm), Bà Quản Gia già tốt bụng nơi Hoạn phủ",
        "theme": "Ơn giọt nước trả bằng ngọn suối; Kiều đền đáp những ân nhân đã từng che chở cho nàng trong hoạn nạn tối tăm."
    },
    {
        "num": 4, "shots": 14, "slug": "EXT. TENT JUDICIAL GROUNDS - DAY",
        "title": "Cảnh 04: Trừng trị lũ buôn người - Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh đền tội trước công lý",
        "act": 1, "loc": "Sân tiền đồn pháp trường trướng hùm, cọc gỗ xích sắt, trời u ám sấm rền (Chiaroscuro, không bạo lực đồ họa)",
        "chars": "Thúy Kiều, Quan chấp pháp, Lũ tội phạm: Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh, Bạc Bà",
        "theme": "Tuyên đọc cáo trạng đanh thép; cái ác bị trừng phạt nghiêm minh theo quân luật, trừ hại cho bá tánh thiên hạ."
    },
    {
        "num": 5, "shots": 14, "slug": "INT. GRAND COMMAND TENT - DAY",
        "title": "Cảnh 05: Màn đấu trí đỉnh cao Kiều & Hoạn Thư - Khẩu khí sắc sảo & Tài hùng biện khuất phục",
        "act": 1, "loc": "Giữa sập gụ trướng hùm, Hoạn Thư quỳ gối nhưng thần thái điềm đạm, ánh mắt sắc sảo thông tuệ",
        "chars": "Thúy Kiều (mỉa mai chua xót), Hoạn Thư (25t, đĩnh đạc phân trần 'Rằng tôi chút dạ đàn bà')",
        "theme": "Cuộc đối mặt kinh điển của hai bộ óc sắc sảo nhất thời đại; Hoạn Thư vận dụng lý lẽ và tâm lý học khuất phục người nghe."
    },
    {
        "num": 6, "shots": 12, "slug": "INT./EXT. GRAND COMMAND TENT - DAY",
        "title": "Cảnh 06: Lòng hải hà tha bổng Hoạn Thư - Ba quân tướng sĩ reo hò tung hô mẫu nghi",
        "act": 1, "loc": "Trướng trung quân và quảng trường doanh trại rợp cờ xí, nắng vàng rực rỡ",
        "chars": "Thúy Kiều, Từ Hải (mỉm cười khâm phục độ lượng phu nhân), Hoạn Thư (cúi đầu bái tạ), Ba quân tướng sĩ",
        "theme": "Kiều ra lệnh cởi trói tha bổng cho Hoạn Thư; đức hiếu sinh dung nạp tài hoa, toàn quân tung hô 'Phu nhân vạn tuế!'."
    },
    {
        "num": 7, "shots": 12, "slug": "INT./EXT. MILITARY CAMP TENT - NIGHT",
        "title": "Cảnh 07: Đêm trăng trướng doanh Kiều & Từ Hải - Khúc tỳ bà thanh bình & Ước vọng giang sơn",
        "act": 2, "loc": "Hậu trướng quân doanh bên bờ biển, ánh trăng vằng vặc soi bóng hai người, đàn tỳ bà khảm xà cừ",
        "chars": "Từ Hải (35t), Thúy Kiều (25t, dịu dàng trong tà áo lụa lam thêu hoa)",
        "theme": "Phút giây yên ả hiếm hoi giữa bão táp; Kiều gảy khúc đàn êm đềm, bày tỏ nỗi xót xa trước cảnh bá tánh chịu nạn đao binh."
    },
    {
        "num": 8, "shots": 13, "slug": "INT. GOVERNOR RESIDENCE - NIGHT",
        "title": "Cảnh 08: Soái phủ Hồ Tôn Hiến - Mặt sắt đen ngòm sau thất bại & Quỷ kế chiêu an ngụy tạo",
        "act": 2, "loc": "Đại sảnh soái phủ triều đình u ám, ngọn đèn dầu lay lắt, bản đồ quân sự với các cứ điểm bị Từ Hải đánh phá",
        "chars": "Hồ Tôn Hiến (50t, mặt sắt đen ngòm, mắt cáo nham hiểm), Các quan văn mưu sĩ triều đình",
        "theme": "Mười vạn quan quân đại bại trước Từ Hải; Hồ Tôn Hiến tìm ra tử huyệt tình cảm của Từ Hải đối với Kiều để tung kế độc."
    },
    {
        "num": 9, "shots": 12, "slug": "INT. CAMP SECRET GATE & TENT - NIGHT",
        "title": "Cảnh 09: Sứ giả triều đình dâng thư chiêu an dát vàng & Rương ngọc ngà mỹ vị bí mật",
        "act": 2, "loc": "Mật đạo ven rào doanh trại, lều tiếp khách khuê phòng, bức thư lụa thêu chỉ vàng mang ấn tín Tổng đốc",
        "chars": "Sứ giả triều đình (khúm núm dâng thư), Thúy Kiều (sững sờ đọc từng hàng chữ hoa mỹ)",
        "theme": "Chiêu bài lừa phỉnh ngọt ngào của triều đình: phong vương cho Từ Hải, ban cáo mệnh phu nhân, hứa hẹn muôn dân thái bình."
    },
    {
        "num": 10, "shots": 12, "slug": "INT. KIỀU'S PRIVATE TENT - LATE NIGHT",
        "title": "Cảnh 10: Nỗi niềm trăn trở của Kiều - Giọt nước mắt thương muôn dân thoát cảnh đầu rơi máu chảy",
        "act": 2, "loc": "Bàn trà khuê phòng trướng gấm, ngọn nến tàn nhỏ giọt sáp đỏ, ánh trăng lạnh chiếu qua khe vải",
        "chars": "Thúy Kiều (25t, ánh mắt giằng xé giữa danh vọng gia đình và trách nhiệm sinh linh trăm họ)",
        "theme": "Kiều ôm ngực rơi lệ; nàng ngây thơ tin rằng quy thuận là con đường cứu rỗi muôn dân khỏi kiếp nạn chiến tranh khốc liệt."
    },
    {
        "num": 11, "shots": 13, "slug": "INT. MILITARY TENT - NIGHT",
        "title": "Cảnh 11: Kiều quỳ khuyên Từ Hải quy thuận - Tranh biện chí khí đại bàng tự do và an nguy trăm họ",
        "act": 3, "loc": "Phòng ngủ trướng hùm, án thư kiếm lệnh, ngọn đèn hoa lung linh",
        "chars": "Thúy Kiều (ôm gối chồng khóc than thiết tha), Từ Hải (35t, nhíu mày cười lớn, bảo vệ chí khí tự do quẫy sóng)",
        "theme": "Từ Hải chỉ rõ cạm bẫy hèn hạ của triều đình; Kiều đem nghĩa mẹ cha, danh thơm tổ tông và mạng sống trăm họ ra tha thiết van nài."
    },
    {
        "num": 12, "shots": 12, "slug": "INT. MILITARY TENT - DAWN",
        "title": "Cảnh 12: Người anh hùng mềm lòng vì giọt lệ tri kỷ - Quyết định hạ đao hòa đàm dứt đao binh",
        "act": 3, "loc": "Khung cửa sổ trướng hùm hướng ra biển lúc hừng đông, thanh đại đao cắm trên giá",
        "chars": "Từ Hải (thở dài, nâng cằm Kiều, ánh mắt yêu thương định mệnh), Thúy Kiều (rưng rưng nụ cười ngỡ thái bình)",
        "theme": "Anh hùng khó qua ải mỹ nhân; vì muốn vợ được rạng danh hiển vinh và thỏa lòng từ tâm, Từ Hải đồng ý buông vũ khí hòa đàm."
    },
    {
        "num": 13, "shots": 12, "slug": "EXT. MILITARY CAMP PODIUM - MORNING",
        "title": "Cảnh 13: Lễ tế cờ giải giáp - Tướng sĩ ngơ ngác, Từ Hải trút giáp sắt bên thềm doanh trại",
        "act": 3, "loc": "Quảng trường quân doanh, gió thổi đại kỳ ngả nghiêng, giá vũ khí xếp đống gươm đao cung nỏ",
        "chars": "Từ Hải (chỉ mặc áo gấm trắng không giáp trụ), Các phó tướng trung thành (bất an, quỳ can ngăn), Thúy Kiều",
        "theme": "Điềm gở bao trùm khi mãnh hổ tự bẻ nanh vuốt; Từ Hải trút bỏ giáp trụ nặng nề để chứng tỏ lòng thành quy phục triều đình."
    },
    {
        "num": 14, "shots": 14, "slug": "EXT. COASTAL RIVER WHARF - NOON",
        "title": "Cảnh 14: Đại lễ quy hàng giả tạo - Hồ Tôn Hiến nâng chén rượu vàng nghênh đón Từ Hải",
        "act": 3, "loc": "Bến sông duyên hải Tiền Đường, khán đài dựng lộng lẫy cờ hoa giả tạo, thảm đỏ trải dài từ bến thuyền",
        "chars": "Hồ Tôn Hiến (mặc phẩm phục tổng đốc, cười giả lả bưng chén rượu mừng), Từ Hải (hiên ngang không tấc sắt), Thúy Kiều (sau rèm lụa)",
        "theme": "Bầu không khí căng thẳng nghẹt thở dưới lớp vỏ ngoài lễ hội thái bình; Từ Hải bước lên khán đài đón nhận chén rượu hòa đàm."
    },
    {
        "num": 15, "shots": 14, "slug": "EXT. AMBUSH GORGE & RIVER WHARF - NOON",
        "title": "Cảnh 15: Cliffhanger tột đỉnh - Chén rượu vỡ tan, vạn mũi tên xé gió giương cung quanh Từ Hải không tấc sắt!",
        "act": 3, "loc": "Khán đài bến sông và các vách núi đá hiểm trở xung quanh hẻm núi",
        "chars": "Hồ Tôn Hiến (lùi lại ném chén rượu vỡ toang), Từ Hải (sững sờ trừng mắt căm hờn), Thúy Kiều (gào thét kinh hoàng sau rèm), Vạn cung thủ",
        "theme": "Tiếng tù và xé trời, hàng vạn mũi tên tẩm độc đồng loạt nhắm vào Từ Hải tay không tấc sắt. Đóng băng khung hình tuyệt vọng."
    }
]

def generate_ep05_shot_details(sc, s_idx):
    sc_num = sc["num"]
    sid = f"ep05_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 bảo kiếm / chén rượu vàng (Detail Prop Close-Up)",
        "Cực cận ánh mắt căm hờn / giọt lệ sám hối (Extreme Close-Up - ECU)",
        "Góc máy thấp tôn vinh tầm vóc anh hùng (Low Angle Heroic Framing)",
        "Góc máy qua vai kịch tính đối chất (Over The Shoulder - OTS)",
        "Toàn cảnh bến sông duyên hải (Panoramic Epic Landscape)",
        "Cận cảnh trượt chậm tiến lại (Slow Dolly In MCU)",
        "Toàn cảnh trướng hùm cờ lệnh rợp trời (Military Tent Wide Scene)",
        "Góc máy chéo nghiêng dồn dập (Dutch Angle Suspense)",
        "Góc máy cận khóa khẩu hình (Direct Profile Close-Up)",
        "Cận cảnh tĩnh lặng xót xa (Static Contemplative Close-Up)",
        "Toàn cảnh kết nối Head-Tail (Continuous Transition Wide Shot)",
        "Góc máy đại cảnh khép lại Hồi (Grand Climax Extreme Wide)"
    ]
    framing = framings[(s_idx - 1) % len(framings)]

    # Mặc định theo scene
    if sc_num == 1:
        v_vi = (
            f"Trướng hùm mở rộng giữa trung quân oai nghiêm. Hàng trăm võ tướng giáp trụ sáng lóa đứng nghiêm cẩn hai hàng, "
            f"cờ lệnh chữ 'TỪ' tung bay phần phật trong gió biển mặn mòi. Trên sập gụ trung tâm trướng, THÚY KIỀU (24 tuổi) "
            f"ngự tọa uy nghi trong bộ áo gấm đỏ thêu phượng hoàng hoàng kim lộng lẫy, đầu đội mũ miện ngọc trai lấp lánh. "
            f"Bên cạnh nàng, TỪ HẢI (34 tuổi) ngồi tựa chuôi đại đao, ánh mắt tràn đầy sự tin tưởng trao trọn quyền phán xét."
        )
        a_s1 = "Tiếng kèn đồng quân nhạc vang rền oai vệ, tiếng chiêng lệnh rền vang khắp quân doanh."
        a_s2 = "Tiếng cờ vải phần phật trong gió biển mặn mòi, tiếng sóng vỗ rì rào ngoài bến cảng xa."
        a_s3 = "Tiếng giáp trụ kim khí va chạm lách cách khi hàng trăm võ tướng đồng loạt chắp tay hành lễ."
        a_s4 = "Tiếng viên quan chấp pháp dõng dạc xướng to: 'Trướng hùm mở giữa trung quân! Cung nghênh lệnh bà ngự tọa!'."
        p_en = (
            f"Epic historical cinema shot, {framing}. Inside the grand military pavilion command tent of general Từ Hải. "
            f"Thúy Kiều (24yo, stunning Vietnamese imperial beauty) sits regally on an ornate carved mahogany throne platform, "
            f"draped in luxurious crimson silk robes embroidered with golden phoenix patterns and a sparkling royal pearl headdress. "
            f"Beside her sits general Từ Hải (34yo, towering warlord with fierce tiger eyes and square jaw, resting hand on his broadsword). "
            f"Two disciplined rows of armored generals stand in reverence beneath billowing navy and gold battle standards. "
            f"Masterclass cinematic composition, 35mm film grain, warm rim lighting. "
            f"Âm thanh: Tiếng kèn đồng quân nhạc rền vang uy nghiêm, tiếng giáp sắt lách cách, tiếng cờ lệnh phần phật. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 2:
        v_vi = (
            f"Quân sĩ dẫn THÚC SINH (28 tuổi) bước lên thềm ngọc trướng hùm. Chàng run lẩy bẩy như cầy sấy trước uy quyền quân pháp "
            f"(Anti-Male-Tears: cơ mặt co rúm sợ hãi nhưng cố nuốt ngược nước mắt vào trong). Kiều mỉm cười dịu dàng, đích thân "
            f"bước xuống thềm ngọc nâng chàng dậy. Nàng ra lệnh gia nhân bưng ra một trăm lạng vàng ròng lấp lánh và một nghìn xúc "
            f"gấm vóc quý giá trao tận tay Thúc Sinh để đền đáp ơn nghĩa chuộc nàng khỏi thanh lâu năm xưa."
        )
        a_s1 = "Dàn nhạc đàn tranh và sáo trúc cất lên khúc nhạc ân tình ấm áp, giải tỏa không khí căng thẳng quân trường."
        a_s2 = "Tiếng gió lùa qua rèm trướng gấm, tiếng thì thầm cảm kích của tướng sĩ hai hàng."
        a_s3 = "Tiếng những thỏi vàng ròng chạm nhau leng keng giòn tan trong khay đồng mạ vàng, tiếng sột soạt gấm lụa cao cấp."
        a_s4 = "Tiếng Kiều dịu dàng: 'Chàng Thúc ơi! Nghìn vàng khôn xiết đền bồi, xin chàng nhận lấy chút lễ mọn này an hưởng tuổi già!'."
        p_en = (
            f"Cinematic historical drama, {framing}. Thúy Kiều (24yo, resplendent in imperial crimson and gold phoenix robes) "
            f"steps gently down the wooden dais in the grand tent to welcome Thúc Sinh (28yo, scholar attire, trembling with shock and awe). "
            f"Servants present overflowing trays of heavy pure gold ingots and bolts of rich woven silk. "
            f"Her expression is filled with profound grace and gratitude. Emotional feudal reunion, soft golden candlelight, 8k resolution. "
            f"Âm thanh: Tiếng vàng nén va nhau leng keng trên khay đồng, tiếng tơ lụa gấm vóc sột soạt, tiếng thoại dịu dàng ân tình. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 4:
        v_vi = (
            f"Sân tiền đồn pháp trường trướng hùm. Lũ buôn người tàn độc năm xưa: Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh, Bạc Bà "
            f"bị xích sắt trói gô quỳ rạp dưới thềm đá (Chiaroscuro: bóng đổ hắt lên vách liếp gỗ, tuyệt đối không bạo lực đồ họa). "
            f"Viên chấp pháp bước ra dõng dạc tuyên đọc tội ác tày trời của phường buôn thịt bán người. Ánh mắt Kiều đanh lại "
            f"cương nghị, vung tay ra lệnh thực thi công lý nghiêm minh để trừ hại cho muôn dân thiên hạ."
        )
        a_s1 = "Tiếng trống lệnh dồn dập rền vang uy nghiêm của phiên tòa xét xử sa trường."
        a_s2 = "Tiếng gió rít u ám xé toạc ráng mây, tiếng sấm ầm ì đằng chân trời biển xa."
        a_s3 = "Tiếng xiềng xích sắt nặng trịch va đập chan chát xuống nền đá hoa cương, tiếng van lạy rầm rập."
        a_s4 = "Tiếng quan chấp pháp dõng dạc: 'Phường buôn người gieo rắc bao oan khiên, nay khép vào cực hình nghiêm minh!'."
        p_en = (
            f"Dramatic judicial scene, {framing}. The military tribunal court in the army courtyard. "
            f"The notorious human traffickers—Mã Giám Sinh, Tú Bà, Sở Khanh, Bạc Hạnh—kneel bound in heavy iron chains before the platform. "
            f"Shadows fall dramatically across weathered wooden screens (Chiaroscuro lighting, strictly compliant, no graphic violence). "
            f"Lady Thúy Kiều observes from above with solemn, unflinching justice in her refined eyes. Authentic Ming/Le period court. "
            f"Âm thanh: Tiếng trống lệnh vang rền từng nhịp uy áp, tiếng xích sắt loảng xoảng, tiếng tuyên án đanh thép. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 5:
        v_vi = (
            f"Giữa trướng hùm, HOẠN THƯ (25 tuổi) bị quân sĩ áp giải quỳ trước sập gụ. Dẫu ở bước đường cùng dưới mũi gươm sáng loáng, "
            f"Hoạn Thư vẫn giữ nguyên cốt cách tiểu thư danh gia vọng tộc: thần thái điềm đạm, ánh mắt sắc sảo thông minh phi thường. "
            f"Kiều nhìn xuống người đàn bà từng dùng đòn ghen hành hạ tinh thần mình, cất lời mỉa mai sắc bén: 'Đàn bà dễ có mấy tay...'. "
            f"Hoạn Thư ngẩng cao đầu phân trần bằng tài hùng biện kinh điển 'Rằng tôi chút dạ đàn bà, ghen tuông thì cũng người ta thường tình!'."
        )
        a_s1 = "Dàn đàn dây réo rắt khúc nhạc căng thẳng tột độ như dây cung kéo căng sắp đứt."
        a_s2 = "Cả gian trướng rộng lớn bỗng im phăng phắc như tờ, chỉ nghe tiếng gió biển rít qua khe cửa."
        a_s3 = "Tiếng vạt áo lụa của Hoạn Thư khẽ lay động khi nàng dập đầu bái lạy một cách ung dung đĩnh đạc."
        a_s4 = "Tiếng Hoạn Thư cất lên rành rọt, thấu tình đạt lý, từng câu từng chữ đanh thép đánh trúng tâm can người nghe."
        p_en = (
            f"High-stakes intellectual confrontation, {framing}. Masterful dialogue shot between Lady Thúy Kiều and Lady Hoạn Thư. "
            f"Hoạn Thư (25yo, aristocratic noblewoman of supreme intelligence, dignified posture despite being bound in silk cords) "
            f"kneels before the throne. Her eyes sparkle with sharp wit and eloquence as she defends herself. "
            f"Thúy Kiều gazes down from her throne, her initial cold cynicism slowly turning into profound respect for her rival's intellect. "
            f"Âm thanh: Tiếng thở nín lặng của cả trướng hùm, tiếng tà áo lụa sột soạt, tiếng đối đáp thông tuệ vang vọng. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 6:
        v_vi = (
            f"Nghe lời phân trần thấu suốt nhân tâm của Hoạn Thư, Thúy Kiều mỉm cười quay sang Từ Hải: 'Làm người ai nỡ giết người tài hoa!'. "
            f"Nàng hạ lệnh quân sĩ lập tức cởi trói tha bổng cho Hoạn Thư về quê quán. Hoạn Thư dập đầu bái tạ trong sự kính phục khôn cùng. "
            f"Chứng kiến tấm lòng bao dung hải hà của bậc mẫu nghi, hàng vạn tướng sĩ ngoài sân tiền đồn đồng loạt giương giáo kích reo hò: "
            f"'Phu nhân vạn tuế! Từ tướng quân vạn tuế!' vang dội cả một góc trời."
        )
        a_s1 = "Giao hưởng bừng sáng khúc khải hoàn ca nhân ái, tiếng kèn đồng ngân vang lộng lẫy hào hùng."
        a_s2 = "Tiếng vạn quân reo hò tung hô rền vang như sấm dậy rung chuyển mặt đất bến cảng."
        a_s3 = "Tiếng sợi dây trói rơi 'xoạch' xuống sàn đá hoa cương, tiếng gươm giáo nâng cao va chạm leng keng."
        a_s4 = "Tiếng vạn binh sĩ đồng thanh rền rĩ: 'Phu nhân vạn tuế! Từ tướng quân vạn tuế!' xé toạc mây trời."
        p_en = (
            f"Heroic resolution and magnanimity, {framing}. Thúy Kiều grants unconditional pardon to Lady Hoạn Thư. "
            f"Guards untie the silk cords; Hoạn Thư bows deeply in sincere reverence. Outside the pavilion, thousands of armed soldiers "
            f"raise their halberds and spears toward the golden sky, cheering for their compassionate and noble lady. "
            f"Sunlight pierces through the banners in radiant God rays. Poetic cinematic justice. "
            f"Âm thanh: Tiếng dây thừng tuột rơi xuống sàn, tiếng vạn quân sĩ tung hô vang rền chấn động trời đất. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 8:
        v_vi = (
            f"Đại sảnh soái phủ triều đình u ám. TỔNG ĐỐC HỒ TÔN HIẾN (50 tuổi, mặt sắt đen ngòm, mắt cáo nham hiểm) ngồi trước bản đồ "
            f"chiến sự gãy nát. Sau khi liên tiếp bị Từ Hải đánh tan tác mười vạn đại quân, hắn bóp nát chén trà sứ trên tay. "
            f"Một tên mật thám bước vào quỳ rạp báo tin về tâm tính nhân hậu thương dân của Thúy Kiều. Hồ Tôn Hiến nở nụ cười quỷ quyệt, "
            f"đập bàn hạ lệnh ngụy tạo bức thư chiêu an dát vàng để lừa Từ Hải tự trói tay nạp mạng."
        )
        a_s1 = "Âm hưởng dàn nhạc u ám, tiếng kèn bass và cello rền rĩ điềm gở của cạm bẫy chính trị."
        a_s2 = "Tiếng gió đêm rít qua mái ngói soái phủ lạnh buốt, tiếng dế đêm kêu râm ran ai oán."
        a_s3 = "Tiếng chén trà sứ bị bóp vỡ toang 'rắc', tiếng mảnh vỡ và nước trà bắn tung tóe trên mặt bàn gỗ gụ."
        a_s4 = "Tiếng Hồ Tôn Hiến cười khẩy sắc lạnh: 'Lấy gươm giáo không xong thì dùng bẫy chiêu an! Để xem con hùm xám thoát khỏi tay ta thế nào!'."
        p_en = (
            f"Dark political thriller scene, {framing}. Inside the shadowy imperial governor's war room. "
            f"Governor Hồ Tôn Hiến (50yo, cunning politician, dark weathered complexion, sharp fox-like eyes, dressed in dark imperial silk) "
            f"stands over a battlefield map marking his crushing defeats against Từ Hải. In cold calculated fury, his hand crushes a porcelain tea cup. "
            f"Dim oil lanterns cast eerie menacing shadows against traditional wooden lattice walls. Masterclass suspense lighting. "
            f"Âm thanh: Tiếng chén sứ bị bóp vỡ vụn rắc rắc, tiếng cười nham hiểm độc địa, tiếng gió đêm rít lạnh buốt. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 11:
        v_vi = (
            f"Khuê phòng trướng hùm đêm khuya. Thúy Kiều ôm chặt lấy đầu gối Từ Hải, nước mắt đầm đìa khuyên nhủ chồng buông gươm hòa đàm: "
            f"'Nghĩ mình phận gái liễu bồ... Chỉ mong chàng quy thuận triều đình để muôn dân thoát cảnh can qua!'. TỪ HẢI (35 tuổi) "
            f"nhíu mày cười lớn, vuốt mái tóc Kiều: 'Ta tung hoành ngang dọc bốn cõi như chim đại bàng trên trời cao, việc gì phải cúi đầu "
            f"xưng thần trước lũ vua quan mục nát? Hạ vũ khí là tự nạp mạng cho cọp dữ!'. Hai lý tưởng va chạm nảy lửa."
        )
        a_s1 = "Khúc nhạc bi thương dâng trào, tiếng đàn nhị nghẹn ngào xé ruột báo trước thảm kịch định mệnh."
        a_s2 = "Tiếng ngọn nến hoa lách tách tàn lụi trong đêm sâu, tiếng gió biển thổi phần phật bên ngoài vách trướng."
        a_s3 = "Tiếng giọt nước mắt Kiều rơi ướt đẫm vạt áo giáp sắt của Từ Hải, tiếng chàng thở dài nén sâu trong lồng ngực."
        a_s4 = "Tiếng Từ Hải dõng dạc: 'Nàng ngây thơ quá! Đại bàng tung cánh trời cao sao có thể chui vào lồng hẹp! Tiện gì cúi mặt xưng thần!'."
        p_en = (
            f"Emotional chamber drama, {framing}. Intimate late-night scene inside the commander's private tent. "
            f"Thúy Kiều (25yo, fragile beauty consumed by noble compassion) clings tearfully to the knee of general Từ Hải. "
            f"Từ Hải (35yo, towering warrior clad in midnight blue silk under-robe) listens with conflicted tenderness, "
            f"gently stroking her long dark hair while frowning at her naive pleas for imperial surrender. "
            f"Tense, dramatic candlelit atmosphere with rich amber tones and deep shadows. "
            f"Âm thanh: Tiếng nến nổ tí tách, tiếng Kiều khóc nấc nghẹn ngào, tiếng Từ Hải thở dài trầm đục. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 14:
        v_vi = (
            f"Bến sông duyên hải Tiền Đường ngày đại lễ quy hàng. Khán đài danh dự trang hoàng rực rỡ cờ hoa giả tạo. "
            f"HỒ TÔN HIẾN đích thân bưng chén rượu mừng nạm vàng bước ra nghênh đón. Tin vào lời hẹn hòa đàm và muốn vợ được "
            f"hưởng cảnh vinh hoa thái bình, TỪ HẢI tháo sạch giáp sắt, không mang theo tấc sắt bước lên khán đài. "
            f"Kiều đứng sau bức rèm lụa mỉm cười rạng rỡ ngỡ mùa xuân thái bình đã về trên khắp giang sơn."
        )
        a_s1 = "Tiếng kèn phường chúc mừng lễ lạc rộn rã rợp trời, nhưng ẩn giấu nhịp điệu dồn dập rùng rợn bên dưới."
        a_s2 = "Tiếng sóng sông Tiền Đường vỗ ầm ầm vào chân bến đá, tiếng gió bấc thổi lạnh căm căm."
        a_s3 = "Tiếng chén rượu vàng va nhẹ vào mâm đồng, tiếng bước chân nặng trịch vững chãi của Từ Hải bước trên thảm đỏ."
        a_s4 = "Tiếng Hồ Tôn Hiến ngọt ngào xảo quyệt: 'Cung nghênh Từ tướng quân dẹp yên binh lửa, đón nhận sắc phong của hoàng triều!'."
        p_en = (
            f"Deceptive grand ceremonial scene, {framing}. At the coastal river pavilion wharf. "
            f"A grand surrender banquet adorned with colorful flags and red ceremonial rugs. General Từ Hải, completely unarmed "
            f"and without his impenetrable battle armor, strides confidently forward in dignified white and gold brocade silk. "
            f"Imperial Governor Hồ Tôn Hiến approaches with a deceitful smile, presenting a gilded golden wine chalice. "
            f"Behind a fluttering sheer silk curtain stands Thúy Kiều, gazing with hopeful joy. "
            f"Âm thanh: Tiếng kèn phường lễ hội rộn ràng giả dối, tiếng sóng sông Tiền Đường dập dồn, tiếng bước chân trên thảm đỏ. "
            f"{AUDIO_GUARD}"
        )
    elif sc_num == 15:
        v_vi = (
            f"ĐỘT NHIÊN! Khóe môi Hồ Tôn Hiến nhếch lên nụ cười tàn độc. Hắn bất thần lùi lại một bước, ném mạnh chén rượu trên tay "
            f"xuống sàn đá vỡ toang (*CLANG!*). Tiếng tù và phục kích hú lên xé toạc trời mây! Từ sau các vách đá và rèm trướng, "
            f"hàng vạn cung thủ quan binh triều đình đồng loạt bật dậy, giương cung căng tràn nhắm thẳng vào Từ Hải tay không tấc sắt! "
            f"Từ Hải trừng mắt nhận ra cạm bẫy. Sau rèm lụa, Kiều kinh hoàng hét lên tiếng thét xé lòng: 'CHÀNG ƠI!!!'."
        )
        a_s1 = "Tiếng tù và mai phục rúc lên inh ỏi điên cuồng: 'Hú... hú... hú...!' xé nát không gian."
        a_s2 = "Tiếng gió rít gào mang theo sát khí lạnh toát cả bến sông Tiền Đường."
        a_s3 = "Tiếng chén rượu vàng đập xuống nền đá vỡ toang 'XOANG!', tiếng hàng vạn dây cung bật căng 'Phựt... phựt... phựt!'."
        a_s4 = "Tiếng Kiều thét xé ruột xé gan từ sau rèm lụa rách toạc: 'CHÀNG ƠI!!!', tiếng Từ Hải gầm vang căm hờn."
        p_en = (
            f"Climactic betrayal cliffhanger, {framing}. Extreme dramatic freeze-frame moment. "
            f"Governor Hồ Tôn Hiến smashes the golden wine goblet onto the stone pavers with a sadistic grin. "
            f"Instantly, thousands of concealed imperial archers rise from rocky cliffs and concealed barricades, "
            f"aiming drawn poison arrows directly at general Từ Hải, who stands isolated and unarmed on the banquet platform. "
            f"From behind the torn silk drapery, Thúy Kiều screams in paralyzing horror. Unforgettable season cliffhanger. "
            f"Âm thanh: Tiếng chén vàng vỡ chát chúa, tiếng tù và phục kích hú rền rĩ, tiếng vạn dây cung kéo căng, tiếng Kiều gào thét. "
            f"{AUDIO_GUARD}"
        )
    else:
        v_vi = (
            f"{sc['title']} - Khung hình điện ảnh phân đoạn {s_idx:02d}. "
            f"Không gian {sc['loc']}. Nhân vật {sc['chars']}. "
            f"Nội dung trọng tâm: {sc['theme']} Cử chỉ, nét mặt và góc máy duy trì chuyển động liền mạch Head-Tail."
        )
        a_s1 = "Dàn nhạc giao hưởng điện ảnh kết hợp nhạc cụ cổ phong tỳ bà và sáo trúc."
        a_s2 = "Âm cảnh môi trường vật lý tự nhiên: tiếng gió biển, tiếng cờ lệnh quân doanh, tiếng sóng vỗ."
        a_s3 = f"Tiếng foley chi tiết khớp hành động khung hình shot {s_idx:02d}."
        a_s4 = "[KHÓA KHẨU HÌNH BẮT BUỘC]: Đôi môi nhân vật trong khung hình khép chặt tự nhiên, không mấp máy."
        p_en = (
            f"Cinematic historical drama, {framing}. Scene at {sc['loc']}. Featuring {sc['chars']}. "
            f"{sc['theme']} Authentic ancient Vietnamese Le-Mac/Ming dynasty costumes and architecture, "
            f"atmospheric lighting, 35mm film grain, masterclass production design, photorealistic 8k render. "
            f"Âm thanh: Âm cảnh môi trường tự nhiên, foley bước chân và chuyển động y phục. "
            f"{AUDIO_GUARD}"
        )

    action_summary = f"{sc['title']} - Phân cảnh {s_idx:02d}/{sc['shots']:02d}"
    prompt_muse = p_en
    prompt_banana = (
        f"Masterpiece 8k cinematic still, 720p resolution 16:9, medium close-up or cinematic wide framing. "
        f"{sc['loc']}. Characters: {sc['chars']}. Authentic ancient Vietnamese aesthetics (Áo Giao Lĩnh, phượng hoàng embroidery, "
        f"imperial military standards, pearl headdresses, mahogany thrones). {sc['theme']} Dramatic natural lighting, photorealistic."
    )

    return {
        "shot_id": sid,
        "scene_num": sc_num,
        "shot_index": s_idx,
        "framing": framing,
        "visual_vi": v_vi,
        "audio_stem1": a_s1,
        "audio_stem2": a_s2,
        "audio_stem3": a_s3,
        "audio_stem4": a_s4,
        "action_summary": action_summary,
        "prompt_muse": prompt_muse,
        "prompt_banana": prompt_banana
    }

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

    all_shots = []
    screenplay_lines = [
        "# KỊCH BẢN PHIM ĐIỆN ẢNH - TẬP 5: ĐOẠN TRƯỜNG THẬP NGŨ (BÁO ÂN BÁO OÁN & CẠM BẪY GIANG SƠN)",
        "## DỰ ÁN AI CINEMA: THẬP NGŨ NIÊN (THE FIFTEEN SPRINGS)",
        "",
        "> **Tập phim**: Tập 5 / 6 Tập (Thời lượng: 30 Phút - 188 Shots - 15 Cảnh - 3 Hồi Chuẩn Hollywood)",
        "> **Mốc thời gian**: Năm thứ tám đến năm thứ mười một triều Gia Tĩnh (Thúy Kiều 23 - 26 tuổi, Từ Hải 33 - 35 tuổi)",
        "> **Tác giả kiêm Chủ sở hữu IP**: **NGUYỄN SĨ SƠN** (Sinh ngày: 08/08/1990, CCCD: 031090010018)",
        "> **Nguyên tác văn học**: *Đoạn Trường Tân Thanh - Truyện Kiều* của Đại thi hào Nguyễn Du (Câu 2315 - 2530, Public Domain)",
        "> **Chuẩn kiểm duyệt & An toàn bản quyền**: 100% YouTube Green Dollar Compliance (Chiaroscuro & Political Suspense)",
        "> **Chỉ thị âm thanh & Diễn xuất**: 4-Stem Architecture, Anti-Male-Tears Directive, Lip-Sync Guard Khóa khẩu hình O.S.",
        "",
        "---",
        "",
        "### BẢNG MA TRẬN 15 CẢNH QUAY TẬP 5 (SCENE BREAKDOWN MATRIX)",
        "| Scene ID | Hồi | Tiêu Đề Cảnh | Số Shot | Thời Lượng | Trọng Tâm Nghệ Thuật |",
        "| :--- | :---: | :--- | :---: | :---: | :--- |"
    ]

    for sc in SCENES_META:
        dur = sc["shots"] * 10
        mins = dur // 60
        secs = dur % 60
        screenplay_lines.append(
            f"| `ep05_scene{sc['num']:02d}` | Hồi {sc['act']} | {sc['title']} | {sc['shots']} shots | {mins:02d}m{secs:02d}s | {sc['theme'][:50]}... |"
        )

    screenplay_lines.extend([
        "",
        "---",
        ""
    ])

    current_act = 0
    act_names = {
        1: "HỒI 1: PHIÊN TÒA CÔNG LÝ OANH LIỆT - BÁO ÂN BÁO OÁN & LƯỢNG HẢI HÀ MẪU NGHI (00:00 - 12:40)",
        2: "HỒI 2: ĐÊM THANH BÌNH TRƯỚNG DOANH & QUỶ KẾ CHIÊU AN HỒ TÔN HIẾN (12:40 - 20:50)",
        3: "HỒI 3: LỜI KHUYÊN DỨT BINH ĐAO & CHÉN RƯỢU MAI PHỤC BẾN SÔNG (20:50 - 31:20)"
    }

    muse_prompts_dict = {}
    banana_prompts_dict = {}

    for sc in SCENES_META:
        if sc["act"] != current_act:
            current_act = sc["act"]
            screenplay_lines.extend([
                f"## {act_names[current_act]}",
                "",
                "---",
                ""
            ])

        screenplay_lines.extend([
            f"### CẢNH {sc['num']:02d}: {sc['slug']} - {sc['title'].upper()}",
            f"- **Bối cảnh**: {sc['loc']}",
            f"- **Nhân vật**: {sc['chars']}",
            f"- **Chủ đề cốt lõi**: {sc['theme']}",
            f"- **Quy mô phân rã**: {sc['shots']} Shots (Mỗi shot 10 giây chuẩn I2V Head-Tail)",
            ""
        ])

        for s_idx in range(1, sc["shots"] + 1):
            detail = generate_ep05_shot_details(sc, s_idx)
            all_shots.append(detail)
            sid = detail["shot_id"]

            muse_prompts_dict[sid] = {
                "scene": f"ep05_scene{sc['num']:02d}",
                "shot": sid,
                "title": detail["action_summary"],
                "motion_prompt": detail["prompt_muse"],
                "audio_guard": AUDIO_GUARD,
                "framing": detail["framing"],
                "duration_seconds": 10,
                "resolution": "1280x720",
                "format": "16:9 MP4"
            }

            banana_prompts_dict[sid] = {
                "shot_id": sid,
                "prompt": detail["prompt_banana"],
                "aspect_ratio": "16:9",
                "resolution": "1280x720",
                "reference_character": "Thúy Kiều / Từ Hải / Hoạn Thư"
            }

            screenplay_lines.extend([
                f"#### Shot {sid} ({detail['framing']})",
                f"**Thị giác (Visual Motion - 10s)**: {detail['visual_vi']}",
                "",
                "**Âm thanh 4-Stems (Cinematic Sound Architecture)**:",
                f"- *Stem 1 (Score/BGM)*: {detail['audio_stem1']}",
                f"- *Stem 2 (Ambience)*: {detail['audio_stem2']}",
                f"- *Stem 3 (Foley/SFX)*: {detail['audio_stem3']}",
                f"- *Stem 4 (Voice/Lip-Sync Guard)*: {detail['audio_stem4']}",
                "",
                f"**Muse Motion Prompt**: `{detail['prompt_muse']}`",
                ""
            ])

    muse_prompts_wrapper = {
        "episode": "ep05",
        "episode_num": 5,
        "project_name": "THẬP NGŨ NIÊN",
        "ai_video_engine": "Muse.ai",
        "version": "2.0_Modular_Episode",
        "general_settings": {
            "format": "16:9 Landscape MP4",
            "resolution": "1280x720",
            "frame_rate": 24,
            "motion_level": "medium",
            "shot_duration_seconds": 10
        },
        "motion_prompts": muse_prompts_dict
    }

    banana_prompts_wrapper = {
        "episode": "ep05",
        "episode_num": 5,
        "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": banana_prompts_dict
    }

    # Ghi Screenplay
    with open(SCREENPLAY_PATH, "w", encoding="utf-8") as f:
        f.write("\n".join(screenplay_lines))
    print(f"✓ Đã ghi kịch bản phân cảnh Tập 5: {SCREENPLAY_PATH.relative_to(BASE_DIR)} ({SCREENPLAY_PATH.stat().st_size // 1024} KB)")

    # Ghi Muse Prompts
    with open(MUSE_PROMPTS_PATH, "w", encoding="utf-8") as f:
        json.dump(muse_prompts_wrapper, f, ensure_ascii=False, indent=2)
    print(f"✓ Đã ghi bộ Motion Prompts Muse Tập 5: {MUSE_PROMPTS_PATH.relative_to(BASE_DIR)} ({len(muse_prompts_dict)} shots)")

    # Ghi Banana Prompts
    with open(BANANA_PROMPTS_PATH, "w", encoding="utf-8") as f:
        json.dump(banana_prompts_wrapper, f, ensure_ascii=False, indent=2)
    print(f"✓ Đã ghi bộ Image Prompts Banana Tập 5: {BANANA_PROMPTS_PATH.relative_to(BASE_DIR)} ({len(banana_prompts_dict)} shots)")

    # Cập nhật Manifest
    update_manifest(len(all_shots), muse_prompts_dict)

def update_manifest(total_shots, muse_prompts_dict):
    manifest = {
        "episode_id": "ep05",
        "title": "Đoạn Trường Thập Ngũ (Báo Ân Báo Oán & Cạm Bẫy Giang Sơn)",
        "duration_minutes": 31.3,
        "total_shots": total_shots,
        "total_scenes": len(SCENES_META),
        "status": "ready_for_batch_render",
        "scenes": []
    }

    rendered_shots = [
        "ep05_scene01_shot01", "ep05_scene01_shot02", "ep05_scene01_shot03", "ep05_scene01_shot04",
        "ep05_scene02_shot01", "ep05_scene02_shot02", "ep05_scene03_shot01", "ep05_scene03_shot02"
    ]

    for sc in SCENES_META:
        sc_num = sc["num"]
        sc_id = f"ep05_scene{sc_num:02d}"
        shot_list = [f"ep05_scene{sc_num:02d}_shot{i:02d}" for i in range(1, sc["shots"] + 1)]
        rendered_in_sc = [s for s in shot_list if s in rendered_shots]

        manifest["scenes"].append({
            "scene_id": sc_id,
            "scene_num": sc_num,
            "act": sc["act"],
            "title": sc["title"],
            "shots_count": sc["shots"],
            "shots": shot_list,
            "rendered_count": len(rendered_in_sc),
            "is_complete": len(rendered_in_sc) == sc["shots"]
        })

    with open(MANIFEST_PATH, "w", encoding="utf-8") as f:
        json.dump(manifest, f, ensure_ascii=False, indent=2)
    print(f"✓ Đã cập nhật manifest.json cho Tập 5! (Tổng số shot: {total_shots})")

if __name__ == "__main__":
    build_ep05_screenplay_and_prompts()
