#!/usr/bin/env bash
# SPDX-License-Identifier: Apache-2.0
# Copyright 2024-2026 Lukasz Krzemien (biuro@softspark.eu)
# Source: https://github.com/softspark/ai-toolkit
#
# track-usage.sh — Track skill invocations for usage stats.
#
# Fires on: UserPromptSubmit
# Writes to: ~/.softspark/ai-toolkit/stats.json
#
# Detects /skill-name pattern from user prompt and increments counter.
# Uses atomic write via python3 os.replace() to prevent corruption.

STATS_FILE="${HOME}/.softspark/ai-toolkit/stats.json"

# Read prompt from stdin (Claude Code passes JSON with .prompt field)
# shellcheck disable=SC2034  # INPUT is consumed via sourced _hook-io.sh
INPUT=$(cat)
# shellcheck source=_hook-io.sh
source "$(dirname "$0")/_hook-io.sh"
PROMPT_TEXT=$(hook_prompt)
[ -z "$PROMPT_TEXT" ] && exit 0

# Only track if prompt starts with a slash command
SKILL_NAME=$(printf '%s' "$PROMPT_TEXT" | grep -oE '^/[a-z][a-z0-9-]*' | head -1 | sed 's|^/||')
[ -z "$SKILL_NAME" ] && exit 0

# Ensure directory exists
mkdir -p "$(dirname "$STATS_FILE")" 2>/dev/null || true

# Atomic update via python3
python3 - "$STATS_FILE" "$SKILL_NAME" 2>/dev/null <<'PY' || true
import json
import sys
import os
from datetime import datetime, timezone

stats_file = sys.argv[1]
skill = sys.argv[2]

data = {}
if os.path.exists(stats_file):
    try:
        with open(stats_file) as f:
            data = json.load(f)
    except (json.JSONDecodeError, IOError):
        data = {}

now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
if skill not in data:
    data[skill] = {"count": 0, "last_used": now}
data[skill]["count"] += 1
data[skill]["last_used"] = now

tmp = stats_file + ".tmp"
with open(tmp, "w") as f:
    json.dump(data, f, indent=2)
os.replace(tmp, stats_file)
PY

exit 0
