#!/bin/sh
set -eu

HOST_PATH="${1:-}"
if [ -z "$HOST_PATH" ]; then
    echo "missing host path" >&2
    exit 127
fi

runtime_dir_default() {
    printf '%s
' "$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime"
}

PLUGIN_DIR="${PJARCZAK_BAMBU_PLUGIN_DIR:-}"
if [ -z "$PLUGIN_DIR" ]; then
    PLUGIN_DIR=$(runtime_dir_default)
fi

trim_file() {
    path="$1"
    if [ ! -f "$path" ]; then
        return 1
    fi
    LC_ALL=C tr -d '\r' < "$path" | head -n 1 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
}

INSTANCE="${PJARCZAK_MAC_LIMA_INSTANCE:-}"
if [ -z "$INSTANCE" ]; then
    INSTANCE=$(trim_file "$PLUGIN_DIR/pjarczak_lima_instance.txt" || true)
fi
if [ -z "$INSTANCE" ]; then
    INSTANCE="orcaslicer-bambu-network"
fi

find_limactl() {
    if [ -n "${PJARCZAK_LIMACTL:-}" ] && [ -x "${PJARCZAK_LIMACTL}" ]; then
        printf '%s\n' "$PJARCZAK_LIMACTL"
        return 0
    fi

    if command -v limactl >/dev/null 2>&1; then
        command -v limactl
        return 0
    fi

    for candidate in \
        "$HOME/Library/Application Support/OrcaSlicer/macos-bridge/lima/bin/limactl" \
        "/opt/homebrew/bin/limactl" \
        "/usr/local/bin/limactl"
    do
        if [ -x "$candidate" ]; then
            printf '%s\n' "$candidate"
            return 0
        fi
    done

    return 1
}

LIMACTL=$(find_limactl || true)
if [ -z "$LIMACTL" ]; then
    echo "limactl not found" >&2
    exit 127
fi

exec "$LIMACTL" shell "$INSTANCE" -- /usr/bin/env \
    PJARCZAK_BAMBU_PLUGIN_DIR="$PLUGIN_DIR" \
    PJARCZAK_BAMBU_NETWORK_SO="$PLUGIN_DIR/libbambu_networking.so" \
    PJARCZAK_BAMBU_SOURCE_SO="$PLUGIN_DIR/libBambuSource.so" \
    PJARCZAK_BAMBU_LIVE555_SO="$PLUGIN_DIR/liblive555.so" \
    PJARCZAK_EXPECTED_BAMBU_NETWORK_VERSION="${PJARCZAK_EXPECTED_BAMBU_NETWORK_VERSION:-}" \
    "$HOST_PATH"
