#!/usr/bin/env python3
from __future__ import annotations

import importlib
import json
import platform
import shutil
import sys
from pathlib import Path

REQUIRED = {
    "flask": "Flask",
    "werkzeug": "Werkzeug",
    "jinja2": "Jinja2",
    "markupsafe": "MarkupSafe",
    "itsdangerous": "itsdangerous",
    "click": "click",
    "blinker": "blinker",
    "gunicorn": "gunicorn",
    "cryptography": "cryptography",
    "flask_sock": "flask-sock",
    "simple_websocket": "simple-websocket",
    "websockets": "websockets",
    "jsonschema": "jsonschema",
}

def version_for(module):
    try:
        from importlib.metadata import version
        return version(REQUIRED[module])
    except Exception:
        return None

result = {
    "python": sys.version.split()[0],
    "platform": platform.platform(),
    "node": shutil.which("node"),
    "npm": shutil.which("npm"),
    "packages": {},
}
for module, distribution in REQUIRED.items():
    try:
        importlib.import_module(module)
        result["packages"][distribution] = {"available": True, "version": version_for(module)}
    except Exception as exc:
        result["packages"][distribution] = {"available": False, "error": type(exc).__name__}
result["runtime_ready"] = all(item["available"] for item in result["packages"].values())
print(json.dumps(result, indent=2, sort_keys=True))
raise SystemExit(0 if result["runtime_ready"] else 2)
