#!/usr/bin/env bash
# KE Dev OS 1.0 FLAGSHIP — public installer (kestudios.dev)
# Flagship of K&E Studios · Coded and developed by William Keenan · @willy.keenan · github.com/willykeenan
# Landing: https://kestudios.dev/os
# Safe to re-run. Does not send telemetry.
set -euo pipefail

FLAGSHIP_URL="https://kestudios.dev/os"
FLAGSHIP_API="https://kestudios.dev/api/flagship"
LOCAL_DASH="http://127.0.0.1:7430"
# Prefer an already-checked-out tree; path is overrideable
REPO_DEFAULT="${KE_DEV_OS_DIR:-$HOME/ke-dev-os}"
REPO_URL="${KE_DEV_OS_REPO:-}"

echo ""
echo "════════════════════════════════════════════════════"
echo "  KE Dev OS 1.0 FLAGSHIP · install"
echo "  ${FLAGSHIP_URL}"
echo "  Coded and developed by William Keenan · K&E Studios"
echo "  Instagram @willy.keenan · GitHub github.com/willykeenan"
echo "════════════════════════════════════════════════════"
echo ""

need() {
  if ! command -v "$1" >/dev/null 2>&1; then
    echo "✗ Missing dependency: $1" >&2
    exit 1
  fi
}

need node
need npm

NODE_MAJOR="$(node -p "process.versions.node.split('.')[0]" 2>/dev/null || echo 0)"
if [[ "${NODE_MAJOR}" -lt 20 ]]; then
  echo "✗ Node.js ≥ 20 required (found $(node -v))" >&2
  exit 1
fi

# Discover local tree: explicit dir, or common checkouts
ROOT="${REPO_DEFAULT}"
if [[ ! -f "${ROOT}/package.json" ]]; then
  for candidate in \
    "${HOME}/ke-dev-os" \
    "${HOME}/KE-Dev-OS" \
    "${HOME}/grokcode" \
    "${KE_DEV_OS_DIR:-}"; do
    if [[ -n "${candidate}" && -f "${candidate}/package.json" ]]; then
      ROOT="${candidate}"
      break
    fi
  done
fi

if [[ -d "${ROOT}/.git" || -f "${ROOT}/package.json" ]]; then
  echo "▸ Using existing tree: ${ROOT}"
elif [[ -n "${REPO_URL}" ]] && command -v git >/dev/null 2>&1; then
  echo "▸ Cloning KE Dev OS → ${ROOT}"
  if git ls-remote "${REPO_URL}" HEAD >/dev/null 2>&1; then
    git clone --depth 1 "${REPO_URL}" "${ROOT}"
  else
    echo "  Remote clone unavailable."
    echo "  Place the KE Dev OS tree at: ${ROOT}"
    echo "  Then re-run this installer."
    echo "  Public landing: ${FLAGSHIP_URL}"
    exit 2
  fi
else
  echo ""
  echo "  No local KE Dev OS tree found."
  echo "  Place the product source at: ${ROOT}"
  echo "  (or set KE_DEV_OS_DIR / KE_DEV_OS_REPO)"
  echo "  Then re-run: curl -fsSL ${FLAGSHIP_URL%/os}/downloads/ke-dev-os-install.sh | bash"
  echo ""
  echo "  Public landing: ${FLAGSHIP_URL}"
  exit 2
fi

cd "${ROOT}"

if [[ ! -f package.json ]]; then
  echo "✗ ${ROOT}/package.json not found" >&2
  exit 1
fi

echo "▸ npm install"
npm install --no-fund --no-audit

if [[ -f scripts/install.sh ]]; then
  echo "▸ scripts/install.sh (build + link)"
  bash scripts/install.sh
elif npm run | grep -q "install:global"; then
  echo "▸ npm run install:global"
  npm run install:global
else
  echo "▸ npm run build && npm link"
  npm run build
  npm link
fi

echo ""
echo "✓ KE Dev OS installed"
# Prefer product name on PATH when linked; fall back to whatever bin is available
if command -v grokcode >/dev/null 2>&1; then
  grokcode --version 2>/dev/null || true
  echo ""
  echo "Launch:"
  echo "  grokcode dashboard     → ${LOCAL_DASH}"
  echo "  grokcode about"
  echo "  open ${FLAGSHIP_URL}"
elif command -v ke-dev-os >/dev/null 2>&1; then
  ke-dev-os --version 2>/dev/null || true
  echo ""
  echo "Launch:"
  echo "  ke-dev-os dashboard    → ${LOCAL_DASH}"
  echo "  open ${FLAGSHIP_URL}"
else
  echo "  Binary not on PATH yet. Try:"
  echo "  export PATH=\"\$HOME/.local/bin:\$PATH\""
  echo "  or: cd ${ROOT} && npm run install:global"
fi
echo ""
echo "Flagship: ${FLAGSHIP_URL}"
echo "Identity: ${FLAGSHIP_API}"
echo "Instagram: @willy.keenan"
echo "GitHub:    https://github.com/willykeenan"
echo ""
