#!/usr/bin/env bash

set -euo pipefail

DEFAULT_ENV="/usr/share/zia-forsuryaos/defaults/environment"
SYSTEM_ENV="/etc/zia-forsuryaos/environment"
REAL_BIN="/usr/libexec/ziactl"
BUNDLED_BIN="/usr/libexec/zia-forsuryaos/bin"
SDK_BRIDGE_DIR="/usr/libexec/zia-forsuryaos/sdk-bridge"
DOCTOR_SCRIPT="$SDK_BRIDGE_DIR/scripts/bridge-doctor.mjs"

load_env_file() {
  if [ -f "$1" ]; then
    set -a
    # shellcheck disable=SC1090
    . "$1"
    set +a
  fi
}

load_env_file "$DEFAULT_ENV"
load_env_file "$SYSTEM_ENV"

# Ensure the bundled opencode CLI is on PATH so the bridge SDK can spawn it
if [ -d "$BUNDLED_BIN" ]; then
  PATH="$BUNDLED_BIN:$PATH"
  export PATH
fi

# Pin a stable XDG_STATE_HOME so the Node sdk-bridge (which writes to
# ${XDG_STATE_HOME || tmpdir()}/opencode-bridge/logs) and the QML UI
# (OpenCodeSDK::eventLogDir() — falls back to ~/.local/state) agree on a
# single log location. Without this the "Open Event Logs" button can open
# an empty ~/.local/state/opencode-bridge/logs while the bridge is writing
# under /tmp.
: "${XDG_STATE_HOME:=$HOME/.local/state}"
export XDG_STATE_HOME

# Non-GUI subcommands (terminal usage) — exec directly so stdout/stderr stay
# clean and pipeable (`ziactl models | grep openai`, etc.).  No log capture.
if [ "$#" -ge 1 ]; then
  case "$1" in
    models|help|-h|--help|-V|--version)
      exec "$REAL_BIN" "$@"
      ;;
    uninstall)
      shift
      UNINSTALL_BIN="/usr/libexec/zia-forsuryaos/ziactl-uninstall"
      if [ ! -x "$UNINSTALL_BIN" ]; then
        echo "ziactl: uninstall helper not found at $UNINSTALL_BIN" >&2
        echo "       (try: sudo apt-get purge zia-forsuryaos)" >&2
        exit 127
      fi
      exec "$UNINSTALL_BIN" "$@"
      ;;
    test)
      shift
      if [ ! -f "$DOCTOR_SCRIPT" ]; then
        echo "ziactl: diagnostic script not found at $DOCTOR_SCRIPT" >&2
        echo "       (try: sudo apt-get install --reinstall zia-forsuryaos)" >&2
        exit 127
      fi
      if ! command -v node >/dev/null 2>&1; then
        echo "ziactl: \`node\` is not on PATH; install nodejs and try again" >&2
        exit 127
      fi
      cd "$SDK_BRIDGE_DIR" || exit 1
      exec node "$DOCTOR_SCRIPT" "$@"
      ;;
  esac
fi

# Auto-capture all terminal output to a log file for diagnostics
LOG_DIR="$XDG_STATE_HOME/opencode-bridge/logs"
mkdir -p "$LOG_DIR" 2>/dev/null || true
LOG_FILE="$LOG_DIR/ziactl.log"

# Rotate if over 5 MB
if [ -f "$LOG_FILE" ] && [ "$(stat -c%s "$LOG_FILE" 2>/dev/null || echo 0)" -gt 5242880 ]; then
  mv -f "$LOG_FILE" "$LOG_FILE.prev"
fi

"$REAL_BIN" "$@" 2>&1 | tee -a "$LOG_FILE"
exit "${PIPESTATUS[0]}"
