#!/usr/bin/env python3
"""Build SRT subtitle file + bilingual markdown reading view from the translated transcript.

Reads <input>.en.json (from translate.py).
Writes:
    <input>.en.srt   — English subtitles for video playback
    <input>.fa.srt   — Persian subtitles (RTL)
    <input>.both.srt — bilingual (Persian on top, English below)
    <input>.bilingual.md — paragraph-by-paragraph reading view

Usage:
    python build_srt.py audio/<file>.mp3
"""
import argparse
import json
import sys
from pathlib import Path


def fmt_ts(seconds: float) -> str:
    """SRT timestamp: HH:MM:SS,mmm"""
    h = int(seconds // 3600)
    m = int((seconds % 3600) // 60)
    s = int(seconds % 60)
    ms = int(round((seconds - int(seconds)) * 1000))
    if ms == 1000:  # rounding edge
        ms = 999
    return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"


def write_srt(segments, out_path: Path, text_key: str = "english", second_text_key: str | None = None):
    lines = []
    for i, seg in enumerate(segments, start=1):
        ts = f"{fmt_ts(seg['start'])} --> {fmt_ts(seg['end'])}"
        text = seg.get(text_key, "").strip()
        if second_text_key:
            text2 = seg.get(second_text_key, "").strip()
            text = f"{text}\n{text2}"
        lines.append(f"{i}\n{ts}\n{text}\n")
    out_path.write_text("\n".join(lines), encoding="utf-8")
    out_path.chmod(0o600)


def write_bilingual_md(segments, out_path: Path):
    """Paragraph-by-paragraph reading view. Persian RTL block + English under it."""
    md = ["# Bilingual reading view", ""]
    for seg in segments:
        start = fmt_ts(seg["start"])
        md.append(f"### {start}")
        md.append("")
        md.append(f'<div dir="rtl" lang="fa">{seg["text"]}</div>')
        md.append("")
        md.append(seg.get("english", ""))
        md.append("")
    out_path.write_text("\n".join(md), encoding="utf-8")
    out_path.chmod(0o600)


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("audio_file", type=Path)
    args = ap.parse_args()

    en_path = args.audio_file.with_suffix(args.audio_file.suffix + ".en.json")
    if not en_path.exists():
        sys.exit(f"translated transcript not found: {en_path} — run translate.py first")

    data = json.loads(en_path.read_text())
    segments = data["segments"]

    base = args.audio_file
    en_srt = base.with_suffix(base.suffix + ".en.srt")
    fa_srt = base.with_suffix(base.suffix + ".fa.srt")
    both_srt = base.with_suffix(base.suffix + ".both.srt")
    bilingual_md = base.with_suffix(base.suffix + ".bilingual.md")

    # text key = "text" for Persian, "english" for English
    # The fa.json segments have "text" (Persian); en.json keeps "text" + adds "english"
    write_srt(segments, en_srt, text_key="english")
    write_srt(segments, fa_srt, text_key="text")
    write_srt(segments, both_srt, text_key="text", second_text_key="english")
    write_bilingual_md(segments, bilingual_md)

    print(f"✓ {len(segments)} segments rendered:")
    print(f"  English SRT:    {en_srt}")
    print(f"  Persian SRT:    {fa_srt}")
    print(f"  Bilingual SRT:  {both_srt}")
    print(f"  Reading view:   {bilingual_md}")


if __name__ == "__main__":
    main()
