"""Read this script, then run with Python 3.11+. Installs only the Media Bridge client."""
import argparse
import hashlib
import json
import os
from pathlib import Path
import re
import subprocess
import sys
import urllib.request
import venv

BASE = 'https://media-bridge.episteme-origin-studio.duckdns.org'


def fetch(url):
    with urllib.request.urlopen(url, timeout=30) as response:
        return response.read(10 * 1024 * 1024)


def main():
    if sys.version_info < (3, 11):
        raise SystemExit('Python 3.11+ required; install Python 3.12 from python.org, then retry.')
    parser = argparse.ArgumentParser()
    parser.add_argument('--directory', default=str(Path.home() / '.media-bridge/client'))
    args = parser.parse_args()
    folder = Path(args.directory).expanduser().resolve()
    manifest = json.loads(fetch(BASE + '/downloads/client.json'))
    filename = manifest['wheel']
    if not re.fullmatch(r'home_media_bridge_client-[0-9.]+-py3-none-any.whl', filename):
        raise ValueError('unexpected package filename')
    payload = fetch(BASE + '/downloads/' + filename)
    if hashlib.sha256(payload).hexdigest() != manifest['sha256']:
        raise ValueError('package checksum mismatch')
    folder.mkdir(parents=True, exist_ok=True)
    wheel = folder / filename
    wheel.write_bytes(payload)
    env = folder / 'venv'
    if not (env / 'pyvenv.cfg').exists():
        venv.EnvBuilder(with_pip=True).create(env)
    python = env / ('Scripts/python.exe' if os.name == 'nt' else 'bin/python')
    subprocess.run([str(python), '-m', 'pip', 'install', '--upgrade', 'pip>=26.2,<27'], check=True)
    subprocess.run([str(python), '-m', 'pip', 'install', '--upgrade', str(wheel) + '[mcp]'], check=True)
    print(json.dumps({'installed': manifest['version'], 'python': str(python), 'cli': [str(python), '-m', 'media_bridge.cli'], 'next': 'configure --key-file PATH, then doctor, mcp-check, mcp-config'}, indent=2))


if __name__ == '__main__':
    main()
