#!/usr/bin/env bash
set -euo pipefail

# ────────────────────────────────────────────
# stop_daemon.sh — Jarvis Daemon 停止スクリプト
# ────────────────────────────────────────────

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PID_FILE="$SCRIPT_DIR/.daemon.pid"
LOG_DIR="$SCRIPT_DIR/logs"
TOKENS_JSONL="$LOG_DIR/tokens.jsonl"

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
CYAN='\033[0;36m'; BOLD='\033[1m'; RESET='\033[0m'

# ── PID チェック ──────────────────────────────
if [[ ! -f "$PID_FILE" ]]; then
  echo -e "${YELLOW}⚠️  PIDファイルが見つかりません（既に停止しているかもしれません）${RESET}"
  exit 0
fi

PID=$(cat "$PID_FILE")

if ! kill -0 "$PID" 2>/dev/null; then
  echo -e "${YELLOW}⚠️  PID $PID は既に停止しています${RESET}"
  rm -f "$PID_FILE"
  exit 0
fi

# ── SIGTERM で綺麗に停止 ──────────────────────
echo -e "${CYAN}🛑 Jarvis Daemon 停止中（PID: $PID）...${RESET}"
kill -TERM "$PID" 2>/dev/null || true

# ── 5秒待機 ──────────────────────────────────
for i in $(seq 1 5); do
  if ! kill -0 "$PID" 2>/dev/null; then
    break
  fi
  sleep 1
  echo -ne "\r   待機中... ${i}秒"
done
echo ""

# ── まだ生きていたら SIGKILL ──────────────────
if kill -0 "$PID" 2>/dev/null; then
  echo -e "${YELLOW}⚠️  SIGTERM 無効。SIGKILL を送信します${RESET}"
  kill -KILL "$PID" 2>/dev/null || true
  sleep 1
fi

# ── 停止確認 ─────────────────────────────────
if kill -0 "$PID" 2>/dev/null; then
  echo -e "${RED}❌ 停止できませんでした（PID: $PID）${RESET}"
  exit 1
fi

rm -f "$PID_FILE"
echo -e "${GREEN}${BOLD}✅ 停止完了${RESET}"

# ── トークン消費サマリ表示 ─────────────────────
if [[ ! -f "$TOKENS_JSONL" ]]; then
  echo -e "${CYAN}（tokens.jsonl なし — サマリなし）${RESET}"
  exit 0
fi

echo ""
echo -e "${BOLD}════════ トークン消費サマリ（通算）════════${RESET}"

python3 - "$TOKENS_JSONL" <<'PYEOF'
import sys, json, datetime

path = sys.argv[1]
total_input = total_output = total_cost = 0
count = 0

try:
    with open(path) as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            try:
                rec = json.loads(line)
                total_input  += rec.get("input_tokens", 0)
                total_output += rec.get("output_tokens", 0)
                total_cost   += rec.get("cost_usd", 0.0)
                count += 1
            except json.JSONDecodeError:
                pass
except FileNotFoundError:
    print("（ファイルなし）")
    sys.exit(0)

print(f"  APIコール数:   {count:,}")
print(f"  入力トークン:  {total_input:,}")
print(f"  出力トークン:  {total_output:,}")
print(f"  合計トークン:  {total_input + total_output:,}")
print(f"  推定コスト:    ${total_cost:.4f} USD")
PYEOF

echo -e "${BOLD}══════════════════════════════════════════${RESET}"
