#!/bin/sh
# Install the coauthr skill for Claude Code.
#
#   curl -fsSL https://coauthr.co/skill/install.sh | sh -s -- --token coa_…
#
# Copies the skill into ~/.claude/skills/coauthr/, writes ~/.config/coauthr/token
# (0600), and verifies the token against coauthr.co. Re-run to update; the
# token argument is optional on updates. No sudo, nothing outside your home.
set -eu

BASE_URL="${COAUTHR_BASE_URL:-https://coauthr.co}"
SKILL_DIR="${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills}/coauthr"
TOKEN_FILE="$HOME/.config/coauthr/token"
TOKEN=""
while [ $# -gt 0 ]; do
  case "$1" in
    --token) TOKEN="$2"; shift 2 ;;
    --token=*) TOKEN="${1#--token=}"; shift ;;
    *) echo "unknown option: $1" >&2; exit 1 ;;
  esac
done

TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
echo "→ downloading skill from $BASE_URL/skill.tgz"
curl -fsSL "$BASE_URL/skill.tgz" -o "$TMP/skill.tgz"
mkdir -p "$SKILL_DIR"
tar -xzf "$TMP/skill.tgz" -C "$SKILL_DIR"
chmod +x "$SKILL_DIR"/scripts/*.sh "$SKILL_DIR"/scripts/*.py 2>/dev/null || true
echo "✓ skill installed at $SKILL_DIR"
# Every agent: ~/.agents/skills is the cross-runtime alias (Gemini CLI, Codex, Copilot CLI);
# ~/.codex/skills is Codex's own dir. Symlinks to the Claude copy so one update serves all.
for d in "$HOME/.agents/skills" "$HOME/.codex/skills"; do
  mkdir -p "$d" 2>/dev/null || continue
  if [ -L "$d/coauthr" ] || [ ! -e "$d/coauthr" ]; then
    rm -f "$d/coauthr"; ln -s "$SKILL_DIR" "$d/coauthr" 2>/dev/null && echo "  also $d/coauthr"
  fi
done

if [ -n "$TOKEN" ]; then
  case "$TOKEN" in
    coa_*) ;;
    *) echo "that doesn't look like a coauthr token (expected coa_…)" >&2; exit 1 ;;
  esac
  mkdir -p "$(dirname "$TOKEN_FILE")"
  umask 077
  printf '%s\n' "$TOKEN" > "$TOKEN_FILE"
  chmod 600 "$TOKEN_FILE"
  echo "✓ token saved to $TOKEN_FILE"
fi

if [ -f "$TOKEN_FILE" ] || [ -n "${COAUTHR_TOKEN:-}" ]; then
  if ME="$(COAUTHR_BASE_URL="$BASE_URL" sh "$SKILL_DIR/scripts/coauthr-me.sh" 2>/dev/null)"; then
    EMAIL="$(printf '%s' "$ME" | sed -n 's/.*"email":"\([^"]*\)".*/\1/p')"
    echo "✓ signed in as ${EMAIL:-?} — your Claude Code can now publish to coauthr"
  else
    echo "! the token didn't verify — mint a fresh one at $BASE_URL/settings and re-run with --token" >&2
    exit 1
  fi
else
  echo "· not signed in yet — run: npx coauthr login   (or: curl -fsSL $BASE_URL/login | sh)"
fi
echo "Next: in Claude Code, say “publish this to coauthr”."
