#!/usr/bin/env bash
# ai-memory — Sync shared AI context across devices
# Fully automatic: pull at session start, push at session end.
# Usage:
#   ai-memory pull    — Load latest context (auto at session start)
#   ai-memory push    — Push updates (auto at session end)
#   ai-memory context — Print context for AI injection
#   ai-memory log "message" — Quick note to active-tasks

set -euo pipefail

MEMORY_DIR="${AI_MEMORY_DIR:-$HOME/ai-memory}"
REPO_URL="${AI_MEMORY_REPO:-https://github.com/zesbe/ai-memory.git}"

# Inject token for private repo
if [[ -n "${GH_TOKEN:-}" ]]; then
    REPO_URL="https://x-access-token:${GH_TOKEN}@github.com/zesbe/ai-memory.git"
elif [[ -n "${GITHUB_TOKEN:-}" ]]; then
    REPO_URL="https://x-access-token:${GITHUB_TOKEN}@github.com/zesbe/ai-memory.git"
fi

# Load token from .env if not in env
if [[ -z "${GH_TOKEN:-}" && -z "${GITHUB_TOKEN:-}" ]]; then
    for envfile in "$HOME/.claude/.env" "$HOME/.kiro/.env"; do
        if [[ -f "$envfile" ]]; then
            GH_TOKEN=$(grep -m1 "^GH_TOKEN=" "$envfile" 2>/dev/null | cut -d= -f2) || true
            if [[ -n "${GH_TOKEN:-}" ]]; then
                REPO_URL="https://x-access-token:${GH_TOKEN}@github.com/zesbe/ai-memory.git"
                break
            fi
        fi
    done
fi

ensure_repo() {
    if [[ ! -d "$MEMORY_DIR/.git" ]]; then
        git clone --depth 1 "$REPO_URL" "$MEMORY_DIR" 2>/dev/null || return 1
        cd "$MEMORY_DIR" && git config user.email "ai@memory" && git config user.name "ai-memory"
    fi
}

case "${1:-context}" in
    pull)
        ensure_repo || exit 0
        cd "$MEMORY_DIR"
        git pull --rebase --quiet 2>/dev/null || true
        ;;
    push)
        ensure_repo || exit 0
        cd "$MEMORY_DIR"
        git pull --rebase --quiet 2>/dev/null || true
        git add -A 2>/dev/null
        if ! git diff --cached --quiet 2>/dev/null; then
            git commit -m "auto: $(date +%Y-%m-%d_%H:%M) from $(hostname -s 2>/dev/null || echo unknown)" --quiet 2>/dev/null
            git push --quiet 2>/dev/null || true
        fi
        ;;
    context)
        ensure_repo || exit 0
        cd "$MEMORY_DIR"
        git pull --rebase --quiet 2>/dev/null || true
        echo "--- AI MEMORY CONTEXT ---"
        cat "$MEMORY_DIR/CONTEXT.md" 2>/dev/null || true
        echo ""
        echo "--- ACTIVE TASKS ---"
        cat "$MEMORY_DIR/active-tasks/current.md" 2>/dev/null || true
        echo "--- END AI MEMORY ---"
        ;;
    log)
        ensure_repo || exit 0
        shift
        echo "- $(date +%H:%M) $*" >> "$MEMORY_DIR/active-tasks/current.md"
        cd "$MEMORY_DIR" && git add -A && git commit -m "log: $*" --quiet 2>/dev/null && git push --quiet 2>/dev/null || true
        ;;
    *)
        echo "Usage: ai-memory [pull|push|context|log \"message\"]"
        ;;
esac
