#!/usr/bin/env python3
"""Bootstrap into the project-selected SDK without importing the pip package."""

import json
import os
import shutil
import sys
from pathlib import Path

project = Path(__file__).resolve().parent
location = json.loads((project / "sdk-location.json").read_text())
prefix = Path(location["sdk"])
python = Path(location.get("python") or sys.executable)
if not prefix.is_absolute():
    prefix = (project / prefix).resolve()
if Path(sys.argv[0]).name == "sdk-debug":
    manifest = json.loads((prefix / "sdk.json").read_text())
    configured = manifest.get("gdb")
    candidates = [os.environ.get("SYMBIAN_GDB"), configured,
                  str(prefix / "bin/arm-none-eabi-gdb"),
                  shutil.which("arm-none-eabi-gdb"),
                  shutil.which("gdb-multiarch")]
    debugger = None
    for candidate in candidates:
        if candidate:
            path = Path(candidate)
            if not path.is_absolute():
                path = prefix / path
            if path.is_file() and os.access(path, os.X_OK):
                debugger = path
                break
    if debugger is None:
        sys.exit("ARM GDB is unavailable. Install arm-none-eabi-gdb or "
                 "gdb-multiarch, or set SYMBIAN_GDB to its executable.")
    settings_file = project / "symbian-project.json"
    port = 24690
    if settings_file.is_file():
        port = json.loads(settings_file.read_text())["preferences"].get("port", port)
    command = prefix / "bin/python"
    if not command.is_file():
        command = python
    arguments = [
        str(command),
        "-m",
        "symbian.emulator.launch",
        "--project",
        str(project),
        "--gdb",
        str(debugger),
        "--port",
        str(port),
        *sys.argv[1:],
    ]
else:
    command = prefix / "bin/symbian"
    module_args = []
    if not command.is_file():
        command = python
        module_args = ["-m", "symbian.cli"]
    arguments = [
        str(command),
        *module_args,
        "app",
        "run",
        "--project",
        str(project),
        *sys.argv[1:],
    ]
os.environ["SYMBIAN_SDK_MANIFEST"] = str(prefix / "sdk.json")
os.execv(str(command), arguments)
