#!/usr/bin/env python3

import os
import sys
import subprocess
from pathlib import Path

ROOT = "/mnt/sda/box/MOVIES"
HTML_PATH = "/home/amos/file/code/html/flexnet/index.html"

def ask(q):
    return input(q).strip().lower() == "y"


def convert_if_needed(src):
    ext = src.split(".")[-1].lower()

    if ext == "mp4":
        return src

    if ext == "mkv":
        if not ask("convert mkv to mp4? (y/N): "):
            print("aborted")
            sys.exit(1)

        out = src.rsplit(".", 1)[0] + ".mp4"

        subprocess.run([
            "ffmpeg", "-y", "-i", src,
            "-c:v", "libx264", "-preset", "ultrafast", "-crf", "30",
            "-c:a", "aac", "-b:a", "128k",
            "-movflags", "+faststart",
            out
        ], check=True)

        return out

    if not ask(f"file is {ext}, continue anyway? (y/N): "):
        sys.exit(1)

    return src


def make_movie_dir(name):
    target = os.path.join(ROOT, name)

    if os.path.exists(target):
        if not ask("directory exists, continue? (y/N): "):
            sys.exit(1)
    else:
        os.makedirs(target, exist_ok=True)

    return target


def link_movie(target_dir, src):
    link = os.path.join(target_dir, "movie.mp4")
    abs_src = str(Path(src).resolve())

    if os.path.exists(link):
        os.remove(link)

    os.symlink(abs_src, link)


def build_data():
    items = []

    for folder in sorted(os.listdir(ROOT)):
        folder_path = os.path.join(ROOT, folder)
        movie = os.path.join(folder_path, "movie.mp4")

        if not os.path.isdir(folder_path):
            continue
        if not os.path.isfile(movie):
            continue

        title = folder.replace("_", " ").title()
        items.append(
            f'      {{ title: "{title}", path: "file://{folder_path}/" }},'
        )

    js = []
    js.append("const data = [")
    js.append("  {")
    js.append('    category: "Movies",')
    js.append("    items: [")
    js.extend(items)
    js.append("    ]")
    js.append("  }")
    js.append("];")

    return "\n".join(js)


def patch_html(new_data):
    with open(HTML_PATH, "r", encoding="utf-8") as f:
        html = f.read()

    import re
    pattern = r"const\s+data\s*=\s*\[[\s\S]*?\];"

    html = re.sub(pattern, new_data, html, count=1)

    with open(HTML_PATH, "w", encoding="utf-8") as f:
        f.write(html)


def main():
    if len(sys.argv) != 3:
        print("usage: script.py <name> <file>")
        sys.exit(1)

    name = sys.argv[1]
    input_file = sys.argv[2]

    target_dir = make_movie_dir(name)

    src = convert_if_needed(input_file)

    link_movie(target_dir, src)

    new_data = build_data()

    patch_html(new_data)

    print("done")


if __name__ == "__main__":
    main()
