#!/bin/bash

# 《末日重生：开局囤货十亿物资》自动同步管理器
# 作者：番茄小说创作助手
# 版本：1.0.0

set -e

# 配置参数
NOVEL_DIR="/root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资"
SUMMARY_DIR="${NOVEL_DIR}/consolidated_summaries"
GITEA_REPO="gitea"
LOGFILE="${NOVEL_DIR}/sync_manager.log"
QC_THRESHOLD=10  # 每10章同步一次

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log() {
    local level=$1
    local message=$2
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo -e "${timestamp} [${level}] ${message}" | tee -a "${LOGFILE}"
    if [[ "${level}" == "ERROR" ]]; then
        echo -e "${RED}${message}${NC}"
    elif [[ "${level}" == "WARN" ]]; then
        echo -e "${YELLOW}${message}${NC}"
    elif [[ "${level}" == "INFO" ]]; then
        echo -e "${GREEN}${message}${NC}"
    fi
}

# 检查章节数量
check_chapter_count() {
    local total_chapters=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | wc -l)
    local last_chapter=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)
    
    echo "章节统计："
    echo "  - 总章节数: ${total_chapters} 章"
    echo "  - 最新章节: 第${last_chapter}章"
    
    # 计算是否需要同步（每10章）
    local sync_needed=$(( (${total_chapters} % ${QC_THRESHOLD}) == 0 ? 1 : 0 ))
    
    if [[ ${sync_needed} -eq 1 ]]; then
        log "INFO" "检测到章节数量为10的倍数，需要同步摘要报告"
        return 0
    else
        log "INFO" "章节数量正常，未达到同步阈值"
        return 1
    fi
}

# 监控修复章节完整性
monitor_fixed_chapters() {
    local fixed_chapters="0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014"
    local damaged_count=0
    
    log "INFO" "开始监控修复章节完整性..."
    
    for chap in ${fixed_chapters}; do
        local chapter_file="${NOVEL_DIR}/chapters/${chap}_*.md"
        if [ -f "${chapter_file}" ]; then
            local file_size=$(stat -c%s "${chapter_file}" 2>/dev/null || stat -f%z "${chapter_file}")
            
            if [[ ${file_size} -lt 1024 ]]; then  # 小于1KB
                log "WARN" "章节 ${chap} 文件过小: ${file_size} 字节"
                damaged_count=$((damaged_count+1))
            elif [[ ${file_size} -eq 0 ]]; then
                log "ERROR" "章节 ${chap} 文件为空！"
                damaged_count=$((damaged_count+1))
            fi
        else
            log "ERROR" "章节 ${chap} 文件丢失！"
            damaged_count=$((damaged_count+1))
        fi
    done
    
    if [[ ${damaged_count} -eq 0 ]]; then
        log "INFO" "所有修复章节完整性检查通过！"
        return 0
    else
        log "ERROR" "发现 ${damaged_count} 个修复章节存在问题！"
        return 1
    fi
}

# 生成摘要报告
generate_summary_report() {
    log "INFO" "开始生成完整摘要报告..."
    
    # 检查章节数量
    local total_chapters=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | wc -l)
    local last_chapter=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)
    
    # 创建最新的摘要报告
    local summary_file="${SUMMARY_DIR}/complete_chapter_summaries.md"
    
    cat > "${summary_file}" << EOF
# 《末日重生：开局囤货十亿物资》完整章节剧情摘要
## 整合时间：$(date '+%Y-%m-%d %H:%M:%S')
## 总章节数：${total_chapters}章

## 📊 故事概述

**末世重生题材**：主角陈末重生回到末日降临前30天，利用先知先觉疯狂囤积十亿物资，建立顶级安全屋，在冰河末世中生存并崛起。

## 📚 章节详细摘要（基于最新快照）

**当前章节数量**: ${total_chapters}章
**最新章节**: 第${last_chapter}章
**统计时间**: $(date '+%Y-%m-%d %H:%M:%S')

### 章节状态总结
- **总章节数**: ${total_chapters}章
- **已修复章节**: 2-14章
- **后续章节**: ${last_chapter}章
- **总行数**: 章节正在统计中
- **同步状态: 待同步**

---

*摘要报告由番茄小说创作助手自动生成*
*同步时间: $(date '+%Y-%m-%d %H:%M:%S')*
EOF
    
    log "INFO" "摘要报告生成完成：${summary_file}"
}

# 执行同步到Gitea
sync_to_gitea() {
    log "INFO" "开始同步到Gitea仓库..."
    
    # 切换到小说目录
    cd "${NOVEL_DIR}"
    
    # 检查git状态
    if ! git status &>/dev/null; then
        log "ERROR" "Git仓库未初始化"
        return 1
    fi
    
    # 检查远程仓库
    if ! git remote | grep -q "${GITEA_REPO}"; then
        log "ERROR" "Gitea远程仓库未配置"
        return 1
    fi
    
    # 添加所有更改
    git add . 2>/dev/null || true
    
    # 检查是否有更改
    if git diff --cached --quiet; then
        log "INFO" "没有更改需要提交"
        return 0
    fi
    
    # 提交更改
    local commit_message="自动同步：章节完整性检查和摘要报告更新

- 章节总数: $(ls -1 "chapters"/*.md | wc -l) 章
- 修复章节检查完成
- 摘要报告更新完成
- 同步时间: $(date '+%Y-%m-%d %H:%M:%S')"

    git commit -m "${commit_message}" || {
        log "ERROR" "提交失败"
        return 1
    }
    
    # 推送到远程仓库
    log "INFO" "正在推送到 Gitea 仓库..."
    if git push "${GITEA_REPO}" master; then
        log "INFO" "同步到Gitea仓库成功！"
        return 0
    else
        log "ERROR" "推送到Gitea仓库失败！"
        return 1
    fi
}

# 创建本地备份
create_local_backup() {
    local backup_dir="${NOVEL_DIR}/backups/$(date '+%Y%m%d_%H%M%S')"
    
    log "INFO" "创建本地备份到: ${backup_dir}"
    
    mkdir -p "${backup_dir}"
    
    # 备份章节文件
    cp -r "${NOVEL_DIR}/chapters" "${backup_dir}/"
    
    # 备份摘要报告
    cp -r "${SUMMARY_DIR}" "${backup_dir}/"
    
    # 备份状态文件
    cp "${NOVEL_DIR}/story/"*.md "${backup_dir}/" 2>/dev/null || true
    
    # 创建备份报告
    cat > "${backup_dir}/backup_report.md" << EOF
# 本地备份报告

## 备份信息
- **备份时间**: $(date '+%Y-%m-%d %H:%M:%S')
- **备份目录**: $(basename ${backup_dir})
- **备份类型**: 本地完整备份

## 备份内容
### 章节文件
- 数量: $(ls -1 "chapters"/*.md 2>/dev/null | wc -l) 章
- 路径: ${NOVEL_DIR}/chapters/

### 摘要报告
- 文件: complete_chapter_summaries.md
- 路径: ${SUMMARY_DIR}/

### 状态文件
- 路径: ${NOVEL_DIR}/story/


## 小说状态
- 总章节数: $(ls -1 "chapters"/*.md 2>/dev/null | wc -l) 章
- 最新章节: 第$(ls -1 "chapters"/*.md 2>/dev/null | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)章
- 数据量: 章节文件总计

## 恢复指南
如需恢复备份，请执行：
\`\`\`bash
# 停止正在运行的小说相关进程
# 复制备份文件
cp -r ${backup_dir}/chapters ${NOVEL_DIR}/
cp -r ${backup_dir}/consolidated_summaries ${NOVEL_DIR}/
cp ${backup_dir}/story/*.md ${NOVEL_DIR}/story/ 2>/dev/null || true
\`\`\`


---

*备份时间: $(date '+%Y-%m-%d %H:%M:%S')*
*番茄小说创作助手*
EOF
    
    # 压缩备份
    tar -czf "${backup_dir}.tar.gz" -C "${NOVEL_DIR}/backups" "$(basename ${backup_dir})"
    
    log "INFO" "本地备份完成：${backup_dir}.tar.gz"
}

# 主执行函数
main() {
    log "INFO" "《末日重生：开局囤货十亿物资》同步管理器启动"
    log "INFO" "=============================================="
    
    # 创建日志目录
    mkdir -p "$(dirname "${LOGFILE}")"
    
    # 步骤1：监控章节完整性
    if check_chapter_count; then
        log "INFO" "检测到需要同步，继续执行..."
        
        # 步骤2：监控修复章节
        if monitor_fixed_chapters; then
            log "INFO" "修复章节检查通过，继续执行..."
        else
            log "ERROR" "修复章节存在问题，需要检查！"
            exit 1
        fi
        
        # 步骤3：生成摘要报告
        generate_summary_report
        
        # 步骤4：同步到Gitea
        if sync_to_gitea; then
            log "INFO" "Gitea同步成功！"
        else
            log "ERROR" "Gitea同步失败"
            exit 1
        fi
        
        # 步骤5：创建本地备份（每周执行一次）
        if [[ $(date '+%u') -eq 7 ]]; then  # 周日执行
            log "INFO" "周日自动创建本地备份..."
            create_local_backup
        fi
        
        log "INFO" "所有同步任务完成！"
        log "INFO" "访问 Gitea 仓库: https://gitea.nevadalice.top:226/liyuchen/novel-doomsday-resurgence"
        
    else
        log "INFO" "当前不需要同步，跳过主要同步任务"
        
        # 只监控修复章节完整性
        monitor_fixed_chapters
        
        log "INFO" "快速完整性检查完成"
    fi
    
    log "INFO" "同步管理器执行完毕"
    log "INFO" "=============================================="
}

# 检查执行模式
if [[ "$1" == "--manual" ]]; then
    # 手动模式
    log "INFO" "手动模式启动"
    shift
    case "$1" in
        "sync")
            generate_summary_report
            sync_to_gitea
            ;;
        "backup")
            create_local_backup
            ;;
        "check")
            check_chapter_count
            monitor_fixed_chapters
            ;;
        "all")
            generate_summary_report
            sync_to_gitea
            create_local_backup
            ;;
        *)
            echo "用法: $0 --manual {sync|backup|check|all}"
            exit 1
            ;;
    esac
else
    # 自动模式
    main
fi

exit 0