#!/bin/bash
# Send a notification to the originating chat (Telegram/Slack)
#
# Usage:
#   notify "message"                                  — auto-route via session registry (default: telegram)
#   notify --slack CHANNEL THREAD_TS "message"        — send to specific Slack thread
#   notify --telegram CHAT_ID "message"               — send to specific Telegram chat
#
# The --slack and --telegram flags let rodents explicitly target where to send,
# based on the adapter info in their prepended message context.

# --- Parse args ---
ADAPTER=""
SLACK_CHANNEL=""
SLACK_THREAD=""
TELEGRAM_CHAT_ID=""

case "$1" in
  --slack)
    ADAPTER="slack"
    SLACK_CHANNEL="${2:-}"
    SLACK_THREAD="${3:-}"
    shift 3 2>/dev/null || { echo "Usage: notify --slack CHANNEL THREAD_TS \"message\"" >&2; exit 1; }
    ;;
  --telegram)
    ADAPTER="telegram"
    TELEGRAM_CHAT_ID="${2:-}"
    shift 2 2>/dev/null || { echo "Usage: notify --telegram CHAT_ID \"message\"" >&2; exit 1; }
    ;;
esac

MESSAGE="${1:-}"
if [ -z "$MESSAGE" ]; then
  echo "Usage: notify [--slack CHANNEL THREAD_TS | --telegram CHAT_ID] \"message\"" >&2
  exit 1
fi

# Both spellings: the platform stamps WOLTSPACE_WOLT_SESSION, older shells
# and skills still carry WOLT_SESSION. See docs/environment.md.
SESSION="${WOLTSPACE_WOLT_SESSION:-${WOLT_SESSION:-}}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SESSION_REG="$SCRIPT_DIR/session-reg"

# Build message — footer (session URL + reply hint) is added by server
WOLT_NAME="${WOLTSPACE_WOLT_NAME:-${WOLT_NAME:-wolt}}"

# Read creature from session registry
EMOJI="🦫"
if [ -n "$SESSION" ]; then
  CREATURE=$($SESSION_REG get-field "$SESSION" creature 2>/dev/null || echo "")
  case "$CREATURE" in
    raccoon) EMOJI="🦝" ;;
    beaver)  EMOJI="🦫" ;;
    otter)   EMOJI="🦦" ;;
    wolf)    EMOJI="🐺" ;;
  esac
fi
FULL_MESSAGE="${EMOJI} ${WOLT_NAME}: $MESSAGE"

# Build JSON payload
PAYLOAD=$(python3 -c "
import json, sys
d = {'session': sys.argv[1], 'message': sys.argv[2]}
adapter = sys.argv[3]
if adapter == 'slack':
    d['adapter'] = 'slack'
    d['channel'] = sys.argv[4]
    d['thread_ts'] = sys.argv[5]
elif adapter == 'telegram':
    d['adapter'] = 'telegram'
    d['chat_id'] = sys.argv[4]
print(json.dumps(d))
" "$SESSION" "$FULL_MESSAGE" "$ADAPTER" "${SLACK_CHANNEL:-${TELEGRAM_CHAT_ID:-}}" "${SLACK_THREAD:-}")

# The control plane that owns this session. Stamped into the session's
# environment at spawn (RuntimeLayout.apply_environment → _SESSION_ENV_KEYS);
# the literal below is only the container's baked-in default, for a shell that
# predates the stamp.
API="${WOLTSPACE_API:-http://localhost:7777}"

RESPONSE=$(curl -s -X POST "${API}/notify" \
  -H "Content-Type: application/json" \
  -d "$PAYLOAD")

if echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); sys.exit(0 if d.get('ok') else 1)" 2>/dev/null; then
  RESP_ADAPTER=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('adapter','?'))")
  echo "[notify] → $RESP_ADAPTER: $MESSAGE"
else
  ERROR=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('error','unknown error'))" 2>/dev/null || echo "$RESPONSE")
  echo "[notify] failed: $ERROR" >&2
  exit 1
fi
