#!/bin/bash

###############################################################################
# FreshRSS 文章备份脚本
# 功能：每天凌晨 1 点备份前一天的所有文章到本地磁盘
# 目录结构：/backup/freshrss/YYYY-MM-DD/订阅源名称/文章列表
###############################################################################

set -e

# 配置项
FRESHRSS_URL="http://10.7.0.5:8080"
FRESHRSS_USER="admin"
FRESHRSS_API_PASSWORD="3a9b87feaf309ef8d3c8dce7dde85ec5"
BACKUP_BASE_DIR="/root/.openclaw/workspace/rss-service/backups"
KEEP_DAYS=365  # 保留最近 365 天的备份

# 计算昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
YESTERDAY_START=$(date -d "yesterday 00:00:00" +%s)
YESTERDAY_END=$(date -d "yesterday 23:59:59" +%s)

# 备份目录
BACKUP_DIR="${BACKUP_BASE_DIR}/${YESTERDAY}"

echo "=========================================="
echo "FreshRSS 文章备份"
echo "日期：${YESTERDAY}"
echo "备份目录：${BACKUP_DIR}"
echo "=========================================="

# 创建备份目录
mkdir -p "${BACKUP_DIR}"

# 获取认证令牌
echo "正在获取认证令牌..."
AUTH_RESPONSE=$(curl -s "${FRESHRSS_URL}/api/greader.php/accounts/ClientLogin?Email=${FRESHRSS_USER}&Passwd=${FRESHRSS_API_PASSWORD}")
SID=$(echo "$AUTH_RESPONSE" | grep "SID=" | cut -d'=' -f2)
AUTH_TOKEN=$(echo "$AUTH_RESPONSE" | grep "Auth=" | cut -d'=' -f2)

if [ -z "$AUTH_TOKEN" ]; then
    echo "❌ 认证失败！"
    exit 1
fi

echo "✅ 认证成功"

# 获取所有订阅源列表
echo "正在获取订阅源列表..."
FEEDS_RESPONSE=$(curl -sL \
    -H "Authorization: GoogleLogin auth=${AUTH_TOKEN}" \
    "${FRESHRSS_URL}/api/greader.php/reader/api/0/subscription/list?output=json")

# 解析订阅源（需要安装 jq）
if ! command -v jq &> /dev/null; then
    echo "❌ 需要安装 jq: apt install jq 或 yum install jq"
    exit 1
fi

# 获取每个订阅源的文章
echo "开始备份文章..."

# 使用 Python 脚本处理（更可靠）
python3 /root/.openclaw/workspace/rss-service/scripts/backup_articles.py \
    --url "${FRESHRSS_URL}" \
    --user "${FRESHRSS_USER}" \
    --api-password "${FRESHRSS_API_PASSWORD}" \
    --date "${YESTERDAY}" \
    --output-dir "${BACKUP_DIR}" \
    --download-images

# 清理旧备份
echo "清理 ${KEEP_DAYS} 天前的备份..."
find "${BACKUP_BASE_DIR}" -maxdepth 1 -type d -mtime +${KEEP_DAYS} -exec rm -rf {} \;

# 生成索引文件
echo "生成索引文件..."
cat > "${BACKUP_DIR}/index.html" << EOF
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FreshRSS 备份 - ${YESTERDAY}</title>
    <style>
        body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; margin: 20px; background: #f5f5f5; }
        .container { max-width: 1200px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        h1 { color: #333; border-bottom: 2px solid #007bff; padding-bottom: 10px; }
        .feed-list { list-style: none; padding: 0; }
        .feed-item { margin: 10px 0; padding: 10px; background: #f8f9fa; border-radius: 4px; }
        .feed-item a { color: #007bff; text-decoration: none; font-weight: 500; }
        .feed-item a:hover { text-decoration: underline; }
        .article-count { color: #666; font-size: 0.9em; margin-left: 10px; }
        .timestamp { color: #999; font-size: 0.8em; }
    </style>
</head>
<body>
    <div class="container">
        <h1>📰 FreshRSS 文章备份</h1>
        <p>备份日期：<strong>${YESTERDAY}</strong></p>
        <p class="timestamp">生成时间：$(date '+%Y-%m-%d %H:%M:%S')</p>
        
        <h2>订阅源列表</h2>
        <ul class="feed-list" id="feedList">
            <li>加载中...</li>
        </ul>
    </div>
    
    <script>
        fetch('feeds.json')
            .then(r => r.json())
            .then(feeds => {
                const list = document.getElementById('feedList');
                list.innerHTML = feeds.map(f => 
                    \`<li class="feed-item">
                        <a href="\${f.name}/index.html">\${f.name}</a>
                        <span class="article-count">(\${f.article_count} 篇文章)</span>
                    </li>\`
                ).join('');
            });
    </script>
</body>
</html>
EOF

echo ""
echo "=========================================="
echo "✅ 备份完成！"
echo "备份目录：${BACKUP_DIR}"
echo "=========================================="

# 显示备份统计
if [ -f "${BACKUP_DIR}/feeds.json" ]; then
    TOTAL_FEEDS=$(jq 'length' "${BACKUP_DIR}/feeds.json")
    TOTAL_ARTICLES=$(jq '[.[].article_count] | add' "${BACKUP_DIR}/feeds.json")
    echo "订阅源数量：${TOTAL_FEEDS}"
    echo "文章总数：${TOTAL_ARTICLES}"
    
    # 显示图片统计
    IMAGE_COUNT=$(find "${BACKUP_DIR}" -name "*.jpg" -o -name "*.png" -o -name "*.gif" -o -name "*.webp" | wc -l)
    echo "保存图片：${IMAGE_COUNT} 张"
fi

echo ""
echo "访问索引：file://${BACKUP_DIR}/index.html"
