"""Startup check: verify Blender >= 5.0.1 is available.

Run before starting the Celery worker. Exits with code 1 if Blender is
missing or below the minimum required version.
"""
import os
import re
import subprocess
import sys
from pathlib import Path

MIN_VERSION = (5, 0, 1)
MIN_VERSION_STR = ".".join(str(v) for v in MIN_VERSION)


def find_blender() -> str:
    import shutil
    env_bin = os.environ.get("BLENDER_BIN", "")
    if env_bin and Path(env_bin).exists():
        return env_bin
    found = shutil.which("blender")
    return found or "blender"


def check_version():
    blender_bin = find_blender()

    if not Path(blender_bin).exists():
        print(f"ERROR: Blender not found at {blender_bin}", file=sys.stderr)
        print(
            "Mount Blender >= 5.0.1 from the host via:\n"
            "  volumes:\n"
            "    - /opt/blender:/opt/blender:ro",
            file=sys.stderr,
        )
        sys.exit(1)

    try:
        result = subprocess.run(
            [blender_bin, "--version"],
            capture_output=True, text=True, timeout=15
        )
        output = result.stdout or result.stderr or ""
    except Exception as exc:
        print(f"ERROR: Could not run Blender: {exc}", file=sys.stderr)
        sys.exit(1)

    match = re.search(r"Blender\s+(\d+)\.(\d+)\.(\d+)", output)
    if not match:
        print(f"ERROR: Could not parse Blender version from output:\n{output[:200]}", file=sys.stderr)
        sys.exit(1)

    version = tuple(int(x) for x in match.groups())
    version_str = ".".join(str(v) for v in version)

    if version < MIN_VERSION:
        print(
            f"ERROR: Blender {version_str} < required {MIN_VERSION_STR}.\n"
            f"Update your host Blender installation.",
            file=sys.stderr,
        )
        sys.exit(1)

    print(f"Blender {version_str} OK (>= {MIN_VERSION_STR})")


if __name__ == "__main__":
    check_version()
