#!/bin/bash
# Travel Agent 心跳检查脚本
# 每 4 小时执行一次（8:00, 12:00, 16:00, 20:00）
# 检查记忆系统状态，确保每日任务正常执行

set -e

WORKSPACE_DIR="/root/.openclaw/workspace/travel"
MEMORY_DIR="${WORKSPACE_DIR}/memory"
HEARTBEAT_STATE="${MEMORY_DIR}/heartbeat-state.json"
TODAY=$(date '+%Y-%m-%d')
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
HOUR=$(date '+%H')

echo "[${TIMESTAMP}] ========== 开始心跳检查 =========="

# 1. 检查今日记忆文件是否存在
TODAY_MEMORY="${MEMORY_DIR}/${TODAY}.md"
if [ ! -f "${TODAY_MEMORY}" ]; then
    echo "[${TIMESTAMP}] ❌ 今日记忆文件不存在，立即创建"
    # 调用初始化脚本
    /root/.openclaw/workspace/travel/scripts/memory_daily_init.sh
else
    echo "[${TIMESTAMP}] ✅ 今日记忆文件存在"
fi

# 2. 检查 heartbeat-state.json 是否更新（超过 24 小时未更新则告警）
if [ -f "${HEARTBEAT_STATE}" ]; then
    LAST_UPDATE=$(grep -o '"lastLogWrite": "[^"]*"' "${HEARTBEAT_STATE}" | cut -d'"' -f4)
    LAST_DATE=$(echo "${LAST_UPDATE}" | cut -d'T' -f1)
    
    if [ "${LAST_DATE}" != "${TODAY}" ]; then
        echo "[${TIMESTAMP}] ⚠️ 警告：heartbeat-state.json 超过 24 小时未更新（上次：${LAST_DATE}）"
        # 更新 lastLogWrite 为当前时间
        sed -i "s/\"lastLogWrite\": \"[^\"]*\"/\"lastLogWrite\": \"${TODAY}T${HOUR}:00:00+08:00\"/" "${HEARTBEAT_STATE}"
        echo "[${TIMESTAMP}] ✅ 已更新 heartbeat-state.json"
    else
        echo "[${TIMESTAMP}] ✅ heartbeat-state.json 已更新（${LAST_DATE}）"
    fi
else
    echo "[${TIMESTAMP}] ❌ heartbeat-state.json 不存在，创建默认配置"
    cat > "${HEARTBEAT_STATE}" << EOF
{
  "lastLogWrite": "${TODAY}T${HOUR}:00:00+08:00",
  "lastMorningBriefing": "",
  "lastWeeklyTasks": "$(date '+%Y-W%V')",
  "lastWeeklyDistill": ""
}
EOF
fi

# 3. 检查是否有 P1 任务
TASK_FILE="${WORKSPACE_DIR}/task.md"
if [ -f "${TASK_FILE}" ]; then
    P1_COUNT=$(grep -c "^- \[ \] P1" "${TASK_FILE}" 2>/dev/null || echo "0")
    if [ "${P1_COUNT}" -gt 0 ]; then
        echo "[${TIMESTAMP}] ⚠️ 有 ${P1_COUNT} 个 P1 任务待执行"
    else
        echo "[${TIMESTAMP}] ✅ 无 P1 任务"
    fi
fi

# 4. 输出状态
echo "[${TIMESTAMP}] ========== 心跳检查完成 =========="
echo "[${TIMESTAMP}] 状态：正常"

# 写入日志
echo "[${TIMESTAMP}] 心跳检查完成 - 状态正常" >> "${MEMORY_DIR}/heartbeat_check.log"
