#!/usr/bin/env bash
# local-ai-bridge client one-liner installer
# Usage: curl -fsSL https://HOST/install/client.sh | bash -s -- --token 'lab_sk_...'
set -euo pipefail

BASE_URL="https://local-ai-bridge-manager.srv1663152.hstgr.cloud"
TOKEN=""
PREFIX="${HOME}/.local"
CONFIG_DIR="${HOME}/.config/local-ai-bridge"

usage() {
  cat <<EOF
Install client helper for local-ai-bridge-manager

  curl -fsSL ${BASE_URL}/install/client.sh | bash -s -- --token 'lab_sk_...'

Options:
  --token TOKEN   Client private key (lab_sk_...) [required]
  --base URL      API base (default: ${BASE_URL})
  --prefix DIR    Install prefix (default: ~/.local)
  -h, --help      This help
EOF
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    --token) TOKEN="${2:-}"; shift 2 ;;
    --base) BASE_URL="${2:-}"; shift 2 ;;
    --prefix) PREFIX="${2:-}"; shift 2 ;;
    -h|--help) usage; exit 0 ;;
    *) echo "Unknown arg: $1" >&2; usage; exit 1 ;;
  esac
done

if [[ -z "$TOKEN" ]]; then
  if [[ -n "${LAB_CLIENT_TOKEN:-}" ]]; then
    TOKEN="$LAB_CLIENT_TOKEN"
  else
    echo "ERROR: pass --token 'lab_sk_...' (or set LAB_CLIENT_TOKEN)" >&2
    exit 1
  fi
fi

API="${BASE_URL%/}/v1"
mkdir -p "$CONFIG_DIR" "${PREFIX}/bin"
chmod 700 "$CONFIG_DIR" 2>/dev/null || true

umask 077
cat >"${CONFIG_DIR}/client.env" <<EOF
# generated by local-ai-bridge-manager client installer
export LAB_BASE_URL="${API}"
export LAB_CLIENT_TOKEN='${TOKEN}'
export OPENAI_BASE_URL="${API}"
export OPENAI_API_KEY='${TOKEN}'
EOF
chmod 600 "${CONFIG_DIR}/client.env"

cat >"${PREFIX}/bin/lab-ai" <<'WRAP'
#!/usr/bin/env bash
set -euo pipefail
ENVF="${HOME}/.config/local-ai-bridge/client.env"
# shellcheck disable=SC1090
[[ -f "$ENVF" ]] && source "$ENVF"
: "${LAB_BASE_URL:?missing LAB_BASE_URL — re-run installer}"
: "${LAB_CLIENT_TOKEN:?missing LAB_CLIENT_TOKEN — re-run installer}"

cmd="${1:-help}"
shift || true
case "$cmd" in
  models|m)
    curl -fsS -H "Authorization: Bearer ${LAB_CLIENT_TOKEN}" "${LAB_BASE_URL}/models"
    echo
    ;;
  chat|c)
    msg="${*:-ping}"
    model="${LAB_MODEL:-}"
    if [[ -z "$model" ]]; then
      model=$(curl -fsS -H "Authorization: Bearer ${LAB_CLIENT_TOKEN}" "${LAB_BASE_URL}/models" \
        | sed -n 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' | head -1)
    fi
    [[ -n "$model" ]] || { echo "no model id — set LAB_MODEL" >&2; exit 1; }
    curl -fsS -H "Authorization: Bearer ${LAB_CLIENT_TOKEN}" \
      -H "Content-Type: application/json" \
      "${LAB_BASE_URL}/chat/completions" \
      -d "$(printf '%s' "$msg" | python3 -c 'import json,sys; m=sys.stdin.read(); print(json.dumps({"model":"'"$model"'","messages":[{"role":"user","content":m}],"max_tokens":256,"temperature":0.2}))')"
    echo
    ;;
  env)
    echo "LAB_BASE_URL=$LAB_BASE_URL"
    echo "LAB_CLIENT_TOKEN=${LAB_CLIENT_TOKEN:0:12}…"
    ;;
  curl)
    curl -fsS -H "Authorization: Bearer ${LAB_CLIENT_TOKEN}" "${LAB_BASE_URL}/$@"
    echo
    ;;
  help|-h|--help|*)
    cat <<EOF
lab-ai — thin client for local-ai-bridge-manager

  lab-ai models          GET /v1/models
  lab-ai chat "hello"    POST /v1/chat/completions
  lab-ai env             show config (token redacted)
  lab-ai curl PATH       GET /v1/PATH

Config: ~/.config/local-ai-bridge/client.env
EOF
    ;;
esac
WRAP
chmod 755 "${PREFIX}/bin/lab-ai"

# smoke
set +e
HTTP=$(curl -sS -o /tmp/lab-ai-models.json -w "%{http_code}" \
  -H "Authorization: Bearer ${TOKEN}" "${API}/models" 2>/dev/null)
set -e
echo "Installed:"
echo "  config  ${CONFIG_DIR}/client.env"
echo "  bin     ${PREFIX}/bin/lab-ai"
echo "  api     ${API}"
if [[ "$HTTP" == "200" ]]; then
  echo "  smoke   OK (HTTP 200 /v1/models)"
elif [[ "$HTTP" == "401" ]]; then
  echo "  smoke   HTTP 401 — key pending/revoked o non ancora accettata dall'admin"
else
  echo "  smoke   HTTP ${HTTP:-err} — controlla rete/upstream"
fi
case ":$PATH:" in
  *":${PREFIX}/bin:"*) ;;
  *) echo "  note    add to PATH: export PATH=\"${PREFIX}/bin:\$PATH\"" ;;
esac
echo "Done. Try:  source ${CONFIG_DIR}/client.env && lab-ai models"
