#!/usr/bin/env bash
set -euo pipefail

# check-update: Compare local plugin version against latest on GitHub
# Output: UP_TO_DATE | UPDATE_AVAILABLE | CHECK_FAILED

PLUGIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
CHANGELOG_URL="https://raw.githubusercontent.com/jsagir/mindrian-os-plugin/main/CHANGELOG.md"

# Read current version from plugin.json via platform.cjs (plan 85-06 sweep).
CURRENT_VERSION=$(node -e "try{process.stdout.write(require('$PLUGIN_ROOT/lib/core/platform.cjs').readPluginJsonVersion('$PLUGIN_ROOT'))}catch(e){process.stdout.write('unknown')}" 2>/dev/null || echo "unknown")
if [ -z "$CURRENT_VERSION" ] || [ "$CURRENT_VERSION" = "unknown" ]; then
  echo "CHECK_FAILED"
  echo "Cannot read plugin version. Your install may be corrupted."
  echo "  Fix: Run /mos:update force to reinstall"
  exit 0
fi

# Fetch remote changelog
if ! REMOTE_CHANGELOG=$(curl -sf --max-time 3 "$CHANGELOG_URL" 2>/dev/null); then
  echo "CHECK_FAILED"
  echo "Could not reach update server."
  echo "  Why: No internet connection or GitHub is temporarily down"
  echo "  Fix: Check your internet connection and try /mos:update again later"
  exit 0
fi

# Extract latest version from first ## [X.Y.Z] heading
LATEST_VERSION=$(echo "$REMOTE_CHANGELOG" | sed -n 's/^## \[\([0-9]*\.[0-9]*\.[0-9]*\)\].*/\1/p' | head -1)

if [[ -z "$LATEST_VERSION" ]]; then
  echo "CHECK_FAILED"
  echo "Could not parse version from remote changelog."
  exit 0
fi

# Compare versions using node (cross-platform, works on macOS without coreutils)
VERSION_CMP=$(node -e "
  const [a,b] = ['$CURRENT_VERSION','$LATEST_VERSION'].map(v => v.split('.').map(Number));
  if (a[0]===b[0] && a[1]===b[1] && a[2]===b[2]) console.log('equal');
  else if (a[0]>b[0] || (a[0]===b[0] && a[1]>b[1]) || (a[0]===b[0] && a[1]===b[1] && a[2]>b[2])) console.log('ahead');
  else console.log('behind');
" 2>/dev/null || echo "behind")

if [[ "$VERSION_CMP" == "equal" ]]; then
  echo "UP_TO_DATE"
  echo "v${CURRENT_VERSION}"
elif [[ "$VERSION_CMP" == "behind" ]]; then
  # Current is older than latest -- extract changelog entries between versions
  CHANGELOG_DIFF=$(echo "$REMOTE_CHANGELOG" | sed -n "/^## \[${LATEST_VERSION}\]/,/^## \[${CURRENT_VERSION}\]/p" | head -n -1)
  echo "UPDATE_AVAILABLE"
  echo "CURRENT=${CURRENT_VERSION}"
  echo "LATEST=${LATEST_VERSION}"
  echo "---CHANGELOG---"
  echo "$CHANGELOG_DIFF"
else
  # Current is newer than latest (dev build)
  echo "UP_TO_DATE"
  echo "v${CURRENT_VERSION}"
fi
