import os
import sys
import re
import time
import requests
import urllib.parse
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed

if hasattr(sys.stdout, 'reconfigure'):
    sys.stdout.reconfigure(encoding='utf-8')

# 6 Ngôn ngữ chuẩn theo yêu cầu
TARGET_LANGS = {
    'vi': 'Vietnamese (Tiếng Việt)',
    'en': 'English',
    'de': 'German (Deutsch)',
    'fr': 'French (Français)',
    'es': 'Spanish (Español)',
    'ja': 'Japanese (日本語)'
}

# Episode offsets in Full Omnibus (seconds)
EPISODE_OFFSETS = {
    1: 0.0,
    2: 280.0,       # 00:04:40
    3: 570.0,       # 00:09:30
    4: 840.0,       # 00:14:00
    5: 1190.0,      # 00:19:50
    6: 1470.0,      # 00:24:30
    7: 1720.0,      # 00:28:40
    8: 1920.0       # 00:32:00
}

# 100% Chính xác chính tả Lịch sử & Khớp âm thanh lời thoại nhân vật
MASTER_DIALOGUE = {
    1: [
        (22.6, 27.4, "Quân Tây Sơn hung hãn cướp ngôi chúa Nguyễn ta!"),
        (30.0, 49.7, "Bẩm quốc vương, thủy quân ta có 300 thuyền lớn, hỏa pháo trang bị tận răng. Hạ thần nguyện dẫn 5 vạn quân đánh thốc vào Gia Định!"),
        (52.2, 58.0, "Chỉ ba tháng sẽ mang đầu tướng Tây Sơn về làm nậm rượu!"),
        (60.0, 88.0, "Nguyễn Vương, ngài nghĩ ta chỉ vì ngài mà xuất binh? Không! Lãnh thổ Nam Bộ béo bở này..."),
        (88.0, 90.5, "quân Xiêm ta lấy một nửa, ngài giữ một nửa!"),
        (90.5, 94.6, "Kế của ta: bộ binh đi đường mòn Chân Lạp đánh kẹp xuống,"),
        (94.6, 97.2, "thủy binh đi dọc vịnh Thái Lan đánh thốc lên!"),
        (97.8, 100.5, "Lấy hỏa lực đè bẹp không cho chúng kịp thở!"),
        (101.0, 103.5, "Tướng quân chớ khinh địch!"),
        (105.0, 108.0, "Quân tướng Tây Sơn vô cùng dũng mãnh!"),
        (113.0, 115.1, "Gươm giáo làm sao..."),
        (115.7, 117.8, "đọ được đại bác của phương Tây?"),
        (118.0, 120.0, "Ngài cứ mở to mắt mà xem!"),
        (148.0, 152.1, "Năm vạn quân Xiêm, cậy thuyền to súng lớn,"),
        (152.1, 156.9, "ép tướng Trương Văn Đa của ta phải lui binh về Mỹ Tho."),
        (157.0, 161.5, "Cứ đà này, Gia Định mất sạch!"),
        (176.1, 180.3, "Chớ lo! Quân Xiêm đường xa đến, cậy lợi ở đánh nhanh."),
        (181.5, 185.3, "Ta chỉ cần mượn địa thế, khóa chặt thế mạnh của chúng!"),
        (189.1, 191.1, "Để xem biến hóa thế nào!"),
        (191.7, 195.9, "Thuyền to hóa thành quan tài, súng lớn hóa thành sắt vụn!"),
        (197.9, 201.0, "Xin cấp cho đệ hạm đội cơ động nhất!"),
        (221.0, 225.0, "Nhạn Lăng, chuẩn bị xuất phát!")
    ],
    2: [
        (30.0, 58.0, "Giữ đội hình! Tiến nhanh lên! Không dừng lại! Vừa đánh vừa rút, giữ đội hình không được rối loạn!"),
        (90.0, 94.2, "Bẩm chủ tướng, quân Tây Sơn rệu rã,"),
        (94.2, 98.2, "ta có nên truy kích cắn đuôi chúng?"),
        (98.2, 107.5, "Không! Bọn chúng rút lui nhưng thế trận không rối, mảng sườn vẫn giữ chặt."),
        (107.5, 110.4, "Đuổi gấp dễ gặp phục binh!"),
        (110.4, 114.6, "Cứ phô trương thanh thế, dùng pháo nã liên tục!"),
        (114.6, 118.3, "Đóng thuyền giàn hàng ngang án ngữ sông lớn,"),
        (118.3, 120.3, "cắt đứt đường tiếp liệu của chúng!"),
        (122.3, 126.3, "Ta muốn chúng phải tự mò ra nộp mạng vì đói và sợ!"),
        (178.3, 187.3, "Mạt tướng vô năng, để giặc Xiêm chiếm nửa Gia Định!"),
        (187.3, 190.3, "Hỏa lực chúng quá mạnh!"),
        (190.3, 194.3, "Không phải lỗi của ông."),
        (194.3, 200.3, "Lấy đoản binh đánh với đại pháo trên sông rộng là tự sát."),
        (200.3, 205.3, "Kẻ dùng binh giỏi không lấy cứng chọi cứng,"),
        (205.3, 209.5, "mà tìm chỗ mềm của địch mà đâm!"),
        (216.5, 218.8, "Thủy quân Xiêm mạnh ở điểm nào?"),
        (222.0, 228.5, "Thuyền to, chứa hàng trăm quân, đại pháo lắp quanh mạn thuyền."),
        (231.5, 233.7, "Thuyền to thì xoay trở chậm."),
        (235.3, 241.0, "Pháo quanh mạn thì chỉ bắn được khi giàn hàng ngang."),
        (241.0, 244.1, "Nếu ta ép chúng vào một khúc sông hẹp,"),
        (244.1, 246.7, "thuyền nọ đụng thuyền kia,"),
        (246.7, 249.1, "pháo chúng sẽ tự bắn vào quân nhà,"),
        (249.1, 251.6, "hoặc trở thành mồi ngon cho lửa!"),
        (251.6, 255.3, "Nhưng Chiêu Tăng rất cáo già."),
        (255.3, 259.2, "Hắn cắm trại ở Trà Tân,"),
        (259.2, 261.2, "án binh bất động chờ ta ra đánh."),
        (265.3, 269.3, "Hắn không vội vì hắn nghĩ hắn đang đè bẹp ta."),
        (273.3, 276.3, "Nói rằng Nguyễn Huệ ta nể uy quân Xiêm,"),
        (276.3, 278.3, "xin nhượng lại Gia Định,"),
        (278.3, 281.3, "chỉ xin giữ đường rút về Quy Nhơn!"),
        (282.3, 286.3, "Tráng sĩ chặt tay, giả mù sa mưa."),
        (287.3, 291.3, "Mồi đã thả! Chuẩn bị xem cọp sập bẫy!")
    ],
    3: [
        (0.0, 20.0, "Tướng công nhà tôi là Nguyễn Huệ, nghe oai danh quân Xiêm như sấm sét, tự biết sức mọn khó lòng cầm cự."),
        (20.0, 30.0, "Nay xin dâng chút lễ mọn, nguyện giao lại toàn bộ Gia Định."),
        (30.0, 37.0, "Chỉ xin tướng quân mở cho một con đường máu để rút tàn quân về Quy Nhơn,"),
        (37.0, 40.0, "đời đời không dám mạo phạm!"),
        (50.0, 56.4, "Nguyễn Huệ được xưng tụng là chiến thần bách chiến bách thắng của Tây Sơn,"),
        (56.4, 59.4, "hóa ra cũng chỉ là kẻ nhát gan sợ chết!"),
        (59.4, 64.5, "Về báo với chủ ngươi:"),
        (64.5, 69.3, "Ba ngày nữa, ta sẽ mở vòng vây phía Bắc."),
        (69.3, 73.4, "Nếu ngoan ngoãn cuốn cờ rút lui,"),
        (73.4, 77.4, "ta tha cho mạng chó!"),
        (77.4, 80.0, "Cảm ơn ngài!"),
        (84.4, 86.4, "Tướng quân xin cẩn thận,"),
        (87.4, 89.4, "Nguyễn Huệ xảo quyệt vô cùng!"),
        (111.4, 114.4, "Trá hay thật, ta đều có cách trị!"),
        (120.4, 125.4, "Ngài nghĩ ta ngu ngốc đến mức để hắn nhởn nhơ rút về sao?"),
        (125.4, 136.0, "Hắn muốn hòa, ta sẽ cho hắn hòa, nhưng là hòa cùng bùn đất sông Tiền!"),
        (155.4, 171.4, "Bẩm chúa công, từ Rạch Gầm đến Xoài Mút dài chưa tới hai dặm, lòng sông ở đây hẹp, lại có cù lao Thới Sơn chắn ngang, hai bên bờ cây cối rậm rạp."),
        (171.4, 178.4, "Thủy triều, ngươi xem, nước đang rút rất nhanh."),
        (178.4, 181.4, "Bùn lầy hai bên bờ lộ rõ."),
        (181.4, 185.4, "Thuyền chiến của Xiêm La to lớn, mớn nước sâu."),
        (185.4, 188.4, "Khi nước ròng, chúng sẽ bị hút vào giữa dòng."),
        (188.4, 192.4, "Không thể dạt vào bờ, cũng chẳng thể quay đầu!"),
        (205.7, 210.9, "Khúc sông này chính là cái thòng lọng ta tìm kiếm!"),
        (210.9, 218.9, "Cây cối rậm rạp thế này, giấu hàng chục khẩu đại bác và đại đao không ai hay biết!"),
        (240.9, 248.9, "Lệnh cho pháo binh: đêm nay bí mật kéo pháo thần công phục sẵn hai bên bờ!")
    ],
    4: [
        (0.0, 28.7, "Nguyễn Huệ tưởng dùng vàng bạc có thể làm ta mờ mắt! Kế hoãn binh của hắn đã lộ!"),
        (28.7, 33.5, "Hắn xin 3 ngày để chuẩn bị thuyền bè rút lui,"),
        (33.5, 36.0, "lúc đội hình của chúng sẽ rối loạn,"),
        (36.0, 37.6, "nhuệ khí xuống thấp nhất,"),
        (37.6, 40.1, "tàu thuyền chở nặng lương thảo cồng kềnh!"),
        (44.6, 49.3, "Ý chủ tướng là... ta tương kế tựu kế?"),
        (52.1, 54.7, "Đúng! Ta vờ chấp thuận cho chúng rút."),
        (55.6, 60.1, "Nhưng đêm nay, toàn bộ 300 chiến thuyền, 5 vạn quân nhổ neo,"),
        (61.5, 64.3, "lợi dụng sương mù và nước xuôi dòng,"),
        (65.2, 68.8, "ta đánh thẳng vào Mỹ Tho trước lúc bình minh!"),
        (70.8, 74.2, "Lúc chúng đang mải thu xếp hành trang bỏ chạy,"),
        (75.2, 78.8, "ta sẽ cho pháo thổi bay doanh trại của chúng!"),
        (80.9, 85.0, "Kế này gọi là Phủ để trừ tân (Rút củi đáy nồi)."),
        (86.8, 90.4, "Hắn muốn giăng bẫy, ta đập nát bẫy từ trong trứng!"),
        (176.8, 186.8, "Nhanh lên! Kéo pháo vào sâu trong rặng dừa nước!"),
        (186.8, 193.8, "Dùng lá ngụy trang cho kín, chĩa thẳng nòng ra giữa dòng sông!"),
        (193.8, 201.8, "Không được để lộ một tia sáng nào trong đêm nay!"),
        (266.8, 281.8, "Bẩm chúa công, thám mã báo về: trại địch ở Trà Tân cờ quạt vẫn im lìm, nhưng tuyệt nhiên không có khói bếp nấu cơm chiều!"),
        (291.8, 296.8, "Không nấu cơm chiều, nghĩa là chúng ăn lương khô để chuẩn bị hành quân đêm!"),
        (296.8, 305.8, "Chiêu Tăng quả nhiên trúng kế! Hắn cho rằng ta đang nới lỏng phòng bị nên muốn cắn trộm ta đây mà!"),
        (305.8, 327.3, "Chiêu Tăng, ngươi muốn đánh lén lúc rạng sáng, ta sẽ mở toang cửa Mỹ Tho đón ngươi!"),
        (327.3, 332.3, "Nhưng để đến được Mỹ Tho, ngươi phải bước qua khúc ruột Rạch Gầm này đã!"),
        (332.3, 335.5, "Lệnh cho đội thuyền tiên phong nhổ neo nghênh địch!"),
        (335.5, 342.5, "Nhớ kỹ: chỉ được bại, không được thắng! Dốc lực dẫn dụ chúng vào vùng nước tử địa!")
    ],
    5: [
        (34.3, 49.3, "Toàn quân nghe lệnh: giữ im lặng tuyệt đối! Bọc vải sô vào mái chèo, buồm chỉ kéo một nửa!"),
        (49.3, 60.3, "Mượn sức nước xuôi dòng và màn đêm che chở, rạng sáng nay ta sẽ san phẳng đại bản doanh Mỹ Tho, không để cho Nguyễn Huệ kịp xỏ giày!"),
        (111.3, 116.3, "Ép sát hỏa thuyền vào đôi bờ! Đợi hạm đội của chúng đi qua hết,"),
        (116.3, 120.3, "khi pháo lệnh nổ, lập tức châm lửa khóa đuôi!"),
        (120.3, 130.3, "Lao thẳng vào giữa gọng thuyền khổng lồ của chúng, lấy thân mình cản đường, tuyệt đối không cho bất kỳ chiến thuyền Xiêm nào có cơ hội quay đầu!"),
        (153.3, 159.3, "Bẩm chúa công, nước đã bắt đầu ròng. Đội thuyền chim mồi của Đô đốc Bảo đã xuất phát được hai canh giờ."),
        (159.3, 162.3, "Tới lúc này chắc hẳn đã giáp mặt hạm đội giặc!"),
        (180.3, 189.3, "Chiêu Tăng tự tin rằng bóng tối và sương mù sẽ che chở cho cuộc hành quân lén lút của hắn."),
        (192.3, 201.3, "Nhưng hắn không biết: sương mù vùng sông nước Nam Bộ này là tấm màn hoàn hảo nhất để che giấu những lưỡi gươm của ta!"),
        (210.3, 214.3, "Nước đang rút rất mạnh!"),
        (214.3, 221.3, "Sức hút của dòng chảy sẽ kéo toàn bộ đội hình thuyền to nặng của chúng vào giữa tim sông."),
        (221.3, 227.3, "Khúc Rạch Gầm giờ đã thành một cái ống trúc không đáy: tiến không được, lùi không xong!"),
        (227.3, 231.3, "Mọi thứ đã giăng sẵn, chỉ chờ mồi lửa cuối cùng!")
    ],
    6: [
        (30.0, 34.0, "Bọn chim mồi Tây Sơn đi tuần!"),
        (34.0, 39.0, "Nghiền nát! Cho chúng nếm thử hỏa pháo của ta!"),
        (60.0, 64.0, "Chặn không được! Hỏa lực chúng mạnh quá, không chống được!"),
        (68.0, 71.0, "Quay đầu! Rút lui giữ mạng!"),
        (101.0, 107.0, "Quả nhiên chúng đã bị hỏa pháo của ta làm cho sợ vỡ mật!"),
        (107.0, 111.0, "Chút nhuệ khí rơm rác này mà đòi xưng hùng xưng bá?"),
        (111.0, 115.0, "Truy kích! Tăng tốc độ toàn hạm đội!"),
        (115.0, 120.1, "Đuổi theo vò nát đội thuyền này! Mở đường xông thẳng vào Mỹ Tho!"),
        (131.6, 140.8, "Tướng quân dừng bước! Khúc sông phía trước là Rạch Gầm - Xoài Mút, chỗ này nước xiết, lòng sông hẹp, hai bên bờ cây cối um tùm."),
        (141.2, 145.1, "Bọn chúng rút lui quá nhanh, e rằng có mai phục!"),
        (152.6, 161.1, "Nguyễn Vương bị Nguyễn Huệ dọa cho mất trí rồi sao? Đêm nay chúng mải lo thu xếp hành trang bỏ chạy, lấy đâu ra quân mà mai phục?!"),
        (170.1, 176.2, "Nhìn kìa! Vũ khí cờ quạt chúng còn vứt hết xuống sông để chạy lấy mạng!"),
        (176.2, 180.6, "Đây là cơ hội nghìn năm có một để tiêu diệt gọn thủy quân của chúng!"),
        (180.6, 183.9, "Ngập ngừng lúc này là đánh mất thời cơ!"),
        (183.9, 191.0, "Thúc trống, toàn hạm đội 300 thuyền tiến lên! Lệnh cấm quay đầu!")
    ],
    7: [
        (30.0, 36.0, "Phát cờ lệnh! Bắn! Bắn! Bắn!"),
        (60.0, 86.0, "Mai phục! Có mai phục! Bắn! Bắn trả!"),
        (86.0, 90.0, "Xoay nòng pháo ra hai bên bờ! Xoay mũi thuyền ngay!"),
        (91.0, 96.0, "Bẩm chủ tướng! Thuyền đông quá, chen chúc chặt cứng rồi!"),
        (97.0, 99.0, "Nước lại đang rút xiết, thuyền không thể bẻ lái!"),
        (106.0, 110.0, "Pháo của ta nằm dọc mạn thuyền, không có góc bắn lên bờ!"),
        (146.0, 148.0, "Chặt nát đội hình địch!")
    ],
    8: [
        (0.0, 29.8, "Không thể nào! Năm vạn quân, 300 thuyền... Nguyễn Huệ không phải là người, hắn là quỷ thần!"),
        (29.8, 34.8, "Tướng quân! Thuyền sắp chìm rồi! Chờ chết ở đây sao?!"),
        (35.8, 39.8, "Mau vứt bỏ giáp trụ theo tôi nhảy xuống nước bơi vào bờ Bắc!"),
        (40.8, 42.8, "Tìm đường bộ chạy sang Chân Lạp!"),
        (46.8, 48.8, "Còn mạng là còn tất cả!"),
        (59.8, 86.8, "Từ nay về sau, chỉ cần nghe hai tiếng Tây Sơn,"),
        (86.8, 90.1, "quân Xiêm ta chắc chắn sẽ kinh hãi đến tận xương tủy!"),
        (116.8, 128.8, "Bẩm chúa công! Trận này ta thiêu rụi toàn bộ 300 chiến thuyền địch, tiêu diệt gần 4 vạn quân!"),
        (131.8, 136.8, "Chỉ còn vài ngàn tàn quân của Chiêu Tăng chạy thục mạng theo đường mòn Chân Lạp!"),
        (137.8, 139.8, "Gia Định đã được giữ vững!"),
        (141.8, 149.3, "Chúa công liệu việc như thần! Vở kịch Rạch Gầm này chúng ta đã diễn quá xuất sắc!"),
        (173.8, 176.8, "Chiêu Tăng! Nguyễn Ánh!"),
        (177.8, 179.8, "Các ngươi hãy nhớ lấy!"),
        (180.8, 182.8, "Đất Nam này là của người Nam!"),
        (183.8, 187.8, "Kẻ nào cõng rắn cắn gà nhà,"),
        (188.8, 194.8, "rước ngoại bang về giày xéo non sông,"),
        (195.8, 204.3, "Nguyễn Huệ ta sẽ đánh cho chúng không còn một mảnh giáp để về!"),
        (204.3, 219.6, "Đánh cho sử tri Nam quốc anh hùng chi hữu chủ!")
    ]
}

def format_srt_time(seconds):
    """Chuyển đổi giây thành format 00:00:00,000"""
    hours = int(seconds // 3600)
    minutes = int((seconds % 3600) // 60)
    sec = seconds % 60
    millis = int((sec - int(sec)) * 1000)
    return f"{hours:02d}:{minutes:02d}:{int(sec):02d},{millis:03d}"

session = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=20, max_retries=3)
session.mount('https://', adapter)

def translate_single(item):
    ep, idx, vi_text, lang = item
    if lang == 'vi':
        return (ep, idx, lang, vi_text)
    
    url = f"https://translate.googleapis.com/translate_a/single?client=gtx&sl=vi&tl={lang}&dt=t&q={urllib.parse.quote(vi_text)}"
    try:
        res = session.get(url, timeout=8)
        if res.status_code == 200:
            data = res.json()
            translated = "".join([part[0] for part in data[0] if part[0]])
            return (ep, idx, lang, clean_translation(translated, lang))
    except Exception as e:
        pass
    return (ep, idx, lang, vi_text)

def clean_translation(text, target_lang):
    """Hậu xử lý chuẩn hóa thuật ngữ lịch sử"""
    t = text.strip()
    if target_lang == 'en':
        t = t.replace("Tay Son's general", "the Tay Son general")
        t = t.replace("Gia Dinh", "Gia Dinh")
        t = t.replace("Rach Gam", "Rach Gam")
        t = t.replace("Nguyen Hue", "Nguyen Hue")
        t = t.replace("Nguyen Anh", "Nguyen Anh")
        t = t.replace("My Tho", "My Tho")
    return t

def build_srt_content(dialogue_list, time_offset=0.0):
    """Tạo chuỗi SRT từ danh sách (start, end, text)"""
    lines = []
    for idx, (start, end, text) in enumerate(dialogue_list, start=1):
        s_str = format_srt_time(start + time_offset)
        e_str = format_srt_time(end + time_offset)
        lines.append(f"{idx}\n{s_str} --> {e_str}\n{text}\n")
    return "\n".join(lines)

def main():
    print("=" * 70, flush=True)
    print("XÂY DỰNG TOÀN BỘ PHỤ ĐỀ CHUẨN 6 THỨ TIẾNG (EP1-EP8 & FULL MOVIE)", flush=True)
    print("Ngôn ngữ: Tiếng Việt (vi), Anh (en), Đức (de), Pháp (fr), TBN (es), Nhật (ja)", flush=True)
    print("Sử dụng: ThreadPoolExecutor (16 workers) + Connection Pooling", flush=True)
    print("=" * 70, flush=True)

    tasks = []
    for ep in range(1, 9):
        for idx, (start, end, vi_text) in enumerate(MASTER_DIALOGUE[ep]):
            for lang in TARGET_LANGS.keys():
                tasks.append((ep, idx, vi_text, lang))

    print(f"Tổng số đoạn thoại cần xử lý: {len(tasks)} requests...", flush=True)
    translated_cache = {}
    t0 = time.time()
    
    with ThreadPoolExecutor(max_workers=16) as executor:
        futures = [executor.submit(translate_single, item) for item in tasks]
        for f in as_completed(futures):
            ep, idx, lang, tr_text = f.result()
            translated_cache[(ep, idx, lang)] = tr_text

    t1 = time.time()
    print(f"✓ Dịch xong toàn bộ {len(translated_cache)} bản dịch trong {t1-t0:.2f}s!", flush=True)

    # 2. Xuất file SRT cho từng tập (content/subtitles/ep{1..8}/)
    print("\n" + "=" * 70, flush=True)
    print("XUẤT CÁC FILE SRT TỪNG TẬP...", flush=True)
    print("=" * 70, flush=True)
    
    for ep in range(1, 9):
        ep_dir = Path(f"content/subtitles/ep{ep}")
        ep_dir.mkdir(parents=True, exist_ok=True)
        
        for lang in TARGET_LANGS.keys():
            lang_dialogues = []
            for idx, (start, end, _) in enumerate(MASTER_DIALOGUE[ep]):
                text = translated_cache.get((ep, idx, lang), "")
                lang_dialogues.append((start, end, text))
            
            srt_str = build_srt_content(lang_dialogues, time_offset=0.0)
            srt_file = ep_dir / f"ep{ep}_{lang}.srt"
            with open(srt_file, "w", encoding="utf-8") as f:
                f.write(srt_str)
            print(f" [OK] {srt_file}", flush=True)

    # 3. Xuất file SRT cho Full Movie Omnibus 36 Phút (4K)
    print("\n" + "=" * 70, flush=True)
    print("XUẤT PHỤ ĐỀ FULL MOVIE OMNIBUS (36 PHÚT 4K)...", flush=True)
    print("=" * 70, flush=True)
    
    full_sub_dir = Path("content/subtitles/full")
    full_sub_dir.mkdir(parents=True, exist_ok=True)
    v4k_dir = Path("content/videos_4k")

    for lang in TARGET_LANGS.keys():
        full_dialogues = []
        for ep in range(1, 9):
            offset = EPISODE_OFFSETS[ep]
            for idx, (start, end, _) in enumerate(MASTER_DIALOGUE[ep]):
                text = translated_cache.get((ep, idx, lang), "")
                full_dialogues.append((start + offset, end + offset, text))

        srt_str = build_srt_content(full_dialogues, time_offset=0.0)
        
        # Lưu vào content/subtitles/full/
        full_srt_file = full_sub_dir / f"full_{lang}.srt"
        with open(full_srt_file, "w", encoding="utf-8") as f:
            f.write(srt_str)
        print(f" [OK Full] {full_srt_file}", flush=True)

        # Đồng thời lưu vào content/videos_4k/
        v4k_srt_file = v4k_dir / f"Forgotten_Battles_1785_Full_4K_{lang}.srt"
        with open(v4k_srt_file, "w", encoding="utf-8") as f:
            f.write(srt_str)
        print(f" [OK 4K]   {v4k_srt_file}", flush=True)

    print("\n🎉 ĐÃ XUẤT XONG TOÀN BỘ 54 FILE SRT (48 FILE TẬP + 6 FILE FULL MOVIE)!", flush=True)

if __name__ == "__main__":
    main()
