#!/usr/bin/env bash
# Hubris statusline для Claude Code.
# Показывает: модель сессии · расход сегодня · баланс.
#
# Использование (~/.claude/settings.json):
#   { "statusLine": { "type": "command", "command": "~/.claude/hubris-statusline.sh" } }
#
# Требования: bash, curl, jq (обычно уже стоят).
# Конфигурация через окружение:
#   ANTHROPIC_AUTH_TOKEN — API-ключ sk-gw-... (тот же, что использует CC).
#   HUBRIS_API_BASE      — необязательно, по умолчанию https://api.hubris.pw.
#
# Hubris хостит этот скрипт по адресу https://hubris.pw/scripts/claude-statusline.sh
# Лицензия — MIT, без гарантий.

set -u

key="${ANTHROPIC_AUTH_TOKEN:-${HUBRIS_API_KEY:-}}"
api="${HUBRIS_API_BASE:-https://api.hubris.pw}"

if [ -z "$key" ]; then
  printf "%s\n" " hubris │ ANTHROPIC_AUTH_TOKEN не задан"
  exit 0
fi

if ! command -v jq >/dev/null 2>&1; then
  printf "%s\n" " hubris │ jq не найден — установите для statusline"
  exit 0
fi

# Claude Code передаёт JSON со списком моделей/расходов в stdin.
stdin_json=""
if [ ! -t 0 ]; then
  stdin_json=$(cat 2>/dev/null || true)
fi

# Модель текущей сессии: из stdin или из ANTHROPIC_MODEL.
model_id=""
if [ -n "$stdin_json" ]; then
  model_id=$(printf "%s" "$stdin_json" | jq -r '.model.display_name // .model.id // empty' 2>/dev/null || true)
fi
if [ -z "$model_id" ]; then
  model_id="${ANTHROPIC_MODEL:-claude}"
fi
# Сократим до короткой формы (`Claude Sonnet 4.5` оставляем как есть).
model_label=$(printf "%s" "$model_id" | sed 's|anthropic/||' | sed 's|claude-||')

# Расход сегодня + баланс из /v1/usage. Таймаут 2с — если шлюз тормозит,
# не блокируем UI Claude Code.
resp=$(curl -sS --max-time 2 \
  -H "Authorization: Bearer ${key}" \
  "${api}/v1/usage?period=today" 2>/dev/null || echo '')

if [ -z "$resp" ]; then
  printf " hubris │ %s │ (не удалось получить баланс)\n" "$model_label"
  exit 0
fi

# Парсим ответ usage. Шлюз отдаёт cost_rub числом (с дробной частью).
spent_today=$(printf "%s" "$resp" | jq -r '.totals.cost_rub // 0' 2>/dev/null || echo "0")

# Балансс — отдельный запрос /v1/me, если есть. Пока не реализован,
# fallback: пишем только today + модель.
# TODO(v2): когда появится /v1/me — добавить balance в строку.

# Форматирование: запятая как десятичный разделитель (русская локаль).
fmt_rub() {
  # Округление до 2 знаков, замена точки на запятую.
  awk -v v="$1" 'BEGIN { printf "%.2f", v }' | sed 's/\./,/'
}

printf " hubris │ %s │ today %s ₽\n" "$model_label" "$(fmt_rub "$spent_today")"
