#!/bin/bash
# plastic-hook-version: 1.1.0
# Runs on SessionStart — checks npm for a newer version on the installed
# channel, writes cache. Channel-aware: queries dist-tags and picks the best
# upgrade target instead of blindly trusting the `latest` tag.

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PLASTIC_HOME="$HOME/.plastic"
CACHE_DIR="$PLASTIC_HOME/.cache"
CACHE_FILE="$CACHE_DIR/update-check.json"
VERSION_FILE="$PLASTIC_HOME/VERSION"
SELECTOR="$SCRIPT_DIR/../scripts/select-update-target"

mkdir -p "$CACHE_DIR"

if [ ! -f "$VERSION_FILE" ]; then
  exit 0
fi

CURRENT=$(cat "$VERSION_FILE" | grep -oE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$')

if [ -z "$CURRENT" ]; then
  exit 0
fi

# Background check — don't block session start
(
  TAGS=$(npm view @zalom/plastic dist-tags --json 2>/dev/null)

  if [ -z "$TAGS" ]; then
    exit 0
  fi

  TARGET=$(printf '%s' "$TAGS" | ruby "$SELECTOR" "$CURRENT" 2>/dev/null)
  CHECKED=$(date -u +%Y-%m-%dT%H:%M:%SZ)

  if [ -n "$TARGET" ]; then
    printf '{"current":"%s","latest":"%s","checked":"%s","updateAvailable":true}\n' \
      "$CURRENT" "$TARGET" "$CHECKED" > "$CACHE_FILE"
  else
    printf '{"current":"%s","latest":"%s","checked":"%s","updateAvailable":false}\n' \
      "$CURRENT" "$CURRENT" "$CHECKED" > "$CACHE_FILE"
  fi
) &

exit 0
