#!/bin/bash
# Jarvis Session End Hook — 会話内容をMD保存 + AI要約（バックグラウンド）
# 2026-05-04 軽量保存即時 + AI要約後付け版

set +e

# PATH明示
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:$HOME/.local/bin:$PATH"

# パス設定
WORKSPACE="/Users/rk/Library/CloudStorage/GoogleDrive-ritsuha1021@gmail.com/マイドライブ/起業フォルダー"
HISTORY_DIR="$WORKSPACE/会話履歴"
LOG_FILE="$HISTORY_DIR/.hook.log"
PROJECT_DIR="$HOME/.claude/projects/-Users-rk-Library-CloudStorage-GoogleDrive-ritsuha1021-gmail-com---------------"

mkdir -p "$HISTORY_DIR"

# 直近セッションログ取得
LATEST_LOG=$(ls -t "$PROJECT_DIR"/*.jsonl 2>/dev/null | head -1)
if [ -z "$LATEST_LOG" ]; then
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] No session log found" >> "$LOG_FILE"
  exit 0
fi

SESSION_ID=$(basename "$LATEST_LOG" .jsonl | cut -c1-8)
TODAY=$(date +%Y-%m-%d)
HISTORY_FILE="$HISTORY_DIR/${TODAY}_${SESSION_ID}.md"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Converting: $SESSION_ID -> $HISTORY_FILE" >> "$LOG_FILE"

# === メタ情報（数値だけ。主題は誤解を招くので載せない）===
TURN_COUNT=$(jq -r '
  select(.type == "user") |
  (if (.message.content | type) == "string" then .message.content
   elif (.message.content | type) == "array" then [.message.content[] | select(.type == "text") | .text] | join("")
   else "" end) as $t |
  select($t != "") |
  select($t | startswith("<system-reminder>") | not) |
  select($t | startswith("<command-") | not) |
  "x"
' "$LATEST_LOG" 2>/dev/null | wc -l | tr -d ' ')

START_TIME=$(jq -r 'select(.timestamp != null) | .timestamp' "$LATEST_LOG" 2>/dev/null | head -1)
END_TIME=$(jq -r 'select(.timestamp != null) | .timestamp' "$LATEST_LOG" 2>/dev/null | tail -1)
LINE_COUNT=$(wc -l < "$LATEST_LOG" | tr -d ' ')

# === MD生成（即時・軽量）===
{
  echo "# 会話履歴 ${TODAY} / セッション ${SESSION_ID}"
  echo ""
  echo "## 🤖 AI要約"
  echo ""
  echo "*生成中... (バックグラウンドで処理中。完了次第ここに挿入されます)*"
  echo ""
  echo "## 📊 メタ情報"
  echo ""
  echo "- **user発言数**: ${TURN_COUNT} 回"
  echo "- **ログ規模**: ${LINE_COUNT} 行"
  echo "- **開始**: ${START_TIME:-不明}"
  echo "- **終了**: ${END_TIME:-不明}"
  echo "- **元ログ**: \`${LATEST_LOG}\`"
  echo "- **保存日時**: $(date '+%Y-%m-%d %H:%M:%S')"
  echo ""
  echo "---"
  echo ""
  echo "## 💬 全文ログ"
  echo ""

  jq -r '
    select(.type == "user" or .type == "assistant") |
    if .type == "user" then
      (
        if (.message.content | type) == "string" then
          .message.content
        elif (.message.content | type) == "array" then
          [.message.content[] | select(.type == "text") | .text] | join("\n")
        else
          ""
        end
      ) as $text |
      if ($text | length) > 0 and ($text | startswith("<system-reminder>") | not) and ($text | startswith("<command-") | not) then
        "### 🟦 User\n\n" + $text + "\n\n---\n"
      else empty
      end
    elif .type == "assistant" then
      (
        if (.message.content | type) == "array" then
          [.message.content[] | select(.type == "text") | .text] | join("\n")
        else
          ""
        end
      ) as $text |
      if ($text | length) > 0 then
        "### 🟧 Assistant\n\n" + $text + "\n\n---\n"
      else empty
      end
    else empty
    end
  ' "$LATEST_LOG" 2>> "$LOG_FILE"

} > "$HISTORY_FILE" 2>> "$LOG_FILE"

SIZE=$(wc -c < "$HISTORY_FILE" 2>/dev/null | tr -d ' ')
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Saved: $HISTORY_FILE (${SIZE} bytes)" >> "$LOG_FILE"

# === AI要約をバックグラウンドで生成 ===
# 別スクリプトに分離してエスケープ問題を回避
AI_SUMMARY_SCRIPT="$WORKSPACE/clone-jarvis/jarvis/ai_summary.sh"
nohup "$AI_SUMMARY_SCRIPT" "$HISTORY_FILE" "$LOG_FILE" > /dev/null 2>&1 &
disown 2>/dev/null

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Hook completed, AI summary running in background" >> "$LOG_FILE"
exit 0
