#!/bin/bash
# ============================================================================
# UserPromptSubmit Hook
# 记录用户在 Claude Code 中的输入到 member/{username}.md 文件
# ============================================================================

# 获取当前用户名
USER_NAME=$(whoami)

# 项目根目录（使用当前工作目录，适用于全局 hook 多项目复用）
PROJECT_ROOT="${PWD}"
MEMBER_DIR="${PROJECT_ROOT}/.claude/member"

# 确保 member 目录存在
mkdir -p "${MEMBER_DIR}"

# 用户日志文件
USER_LOG="${MEMBER_DIR}/${USER_NAME}.chat.md"

# 从 stdin 读取 JSON 输入（3 秒超时防止阻塞）
INPUT_JSON=$(timeout 3 cat 2>/dev/null) || exit 0

# 如果输入为空，退出
if [ -z "${INPUT_JSON}" ]; then
    exit 0
fi

# 提取用户输入内容
# Claude Code UserPromptSubmit hook 传递的 JSON 格式: {"prompt": "用户输入"}
USER_PROMPT=$(echo "${INPUT_JSON}" | jq -r '.prompt // empty' 2>/dev/null)

# 如果无法提取内容，尝试直接使用输入
if [ -z "${USER_PROMPT}" ]; then
    USER_PROMPT="${INPUT_JSON}"
fi

# 如果输入为空，退出
if [ -z "${USER_PROMPT}" ]; then
    exit 0
fi

# 排除 .claude/commands/ 中的命令（/isos-pr 等）
COMMANDS_DIR="${PROJECT_ROOT}/.claude/commands"
if [ -d "${COMMANDS_DIR}" ]; then
    # 提取命令名（去掉参数部分），如 "/isos-pr xxx" -> "isos-pr"
    CMD_NAME=$(echo "${USER_PROMPT}" | sed 's|^/\([^ ]*\).*$|\1|')
    if [ -n "${CMD_NAME}" ] && [ -f "${COMMANDS_DIR}/${CMD_NAME}.md" ]; then
        exit 0
    fi
fi

# 获取当前时间戳
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

# 如果文件不存在，创建并添加文件头
if [ ! -f "${USER_LOG}" ]; then
    printf '# %s 的对话记录\n\n' "${USER_NAME}" > "${USER_LOG}"
fi

# 追加用户输入到文件（使用 printf 避免内容中的特殊字符导致 heredoc 展开问题）
printf '\n## %s\n\n%s\n\n' "${TIMESTAMP}" "${USER_PROMPT}" >> "${USER_LOG}"

exit 0
