#!/bin/bash
# Travel Agent 每周记忆蒸馏任务
# 每周日凌晨 3:00 执行，提炼过去 7 天的长期记忆
# 添加到 crontab: 0 3 * * 0 /root/.openclaw/workspace/travel/scripts/weekly_memory_distill.sh

set -e

WORKSPACE_DIR="/root/.openclaw/workspace/travel"
MEMORY_DIR="${WORKSPACE_DIR}/memory"
SCRIPTS_DIR="${WORKSPACE_DIR}/scripts"
LOG_FILE="${MEMORY_DIR}/weekly_distill.log"

TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
CURRENT_WEEK=$(date '+%Y-W%V')
TODAY=$(date '+%Y-%m-%d')

echo "[${TIMESTAMP}] ========== 开始执行每周记忆蒸馏 ==========" | tee -a "${LOG_FILE}"

# 读取 heartbeat-state.json 检查上周是否已执行
STATE_FILE="${MEMORY_DIR}/heartbeat-state.json"
if [ ! -f "${STATE_FILE}" ]; then
    echo '{"lastWeeklyTasks": ""}' > "${STATE_FILE}"
fi

LAST_WEEK=$(python3 -c "import json; f=open('${STATE_FILE}'); d=json.load(f); print(d.get('lastWeeklyTasks', ''))" 2>/dev/null || echo "")

echo "[${TIMESTAMP}] 当前周次：${CURRENT_WEEK}" | tee -a "${LOG_FILE}"
echo "[${TIMESTAMP}] 上周次：${LAST_WEEK}" | tee -a "${LOG_FILE}"

# 如果上周已执行，跳过
if [ "${LAST_WEEK}" = "${CURRENT_WEEK}" ]; then
    echo "[${TIMESTAMP}] ✓ 本周已执行过记忆蒸馏，跳过" | tee -a "${LOG_FILE}"
    exit 0
fi

# 计算 7 天前的日期
SEVEN_DAYS_AGO=$(date -d '7 days ago' '+%Y-%m-%d')

echo "[${TIMESTAMP}] 读取近 7 天记忆文件（${SEVEN_DAYS_AGO} 至 ${TODAY}）..." | tee -a "${LOG_FILE}"

# 创建 Python 蒸馏脚本
DISTILL_SCRIPT="${SCRIPTS_DIR}/weekly_distill.py"

python3 "${DISTILL_SCRIPT}" "${SEVEN_DAYS_AGO}" "${TODAY}" "${CURRENT_WEEK}" 2>&1 | tee -a "${LOG_FILE}"

DISTILL_EXIT_CODE=$?

if [ ${DISTILL_EXIT_CODE} -eq 0 ]; then
    echo "[${TIMESTAMP}] ✓ 记忆蒸馏成功" | tee -a "${LOG_FILE}"
    
    # 更新 heartbeat-state.json
    python3 << EOF
import json
from datetime import datetime

state_file = "${STATE_FILE}"
try:
    with open(state_file, 'r', encoding='utf-8') as f:
        state = json.load(f)
except:
    state = {}

state['lastWeeklyTasks'] = "${CURRENT_WEEK}"
state['lastWeeklyDistill'] = datetime.now().isoformat()

with open(state_file, 'w', encoding='utf-8') as f:
    json.dump(state, f, ensure_ascii=False, indent=2)

print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] ✓ 已更新 heartbeat-state.json")
EOF
    
    # 发送成功通知
    echo "[${TIMESTAMP}] 发送成功通知..." | tee -a "${LOG_FILE}"
    echo "✅ 记忆蒸馏任务完成 (${CURRENT_WEEK}) - 已更新 MEMORY.md"
    
    echo "[${TIMESTAMP}] ========== 任务执行完成 ==========" | tee -a "${LOG_FILE}"
else
    echo "[${TIMESTAMP}] ✗ 记忆蒸馏失败，退出码：${DISTILL_EXIT_CODE}" | tee -a "${LOG_FILE}"
    echo "⚠️ 记忆蒸馏任务失败 (${CURRENT_WEEK}) - 请检查日志"
    echo "[${TIMESTAMP}] ========== 任务执行失败 ==========" | tee -a "${LOG_FILE}"
fi

exit ${DISTILL_EXIT_CODE}
