#!/bin/bash

# 监控 inkos 守护进程脚本
# 作者：番茄小说创作助手
# 功能：每小时检查 inkos 状态，如果停止则修复并重启

LOG_FILE="/tmp/inkos-monitor.log"
DAEMON_LOG="/tmp/inkos-daemon.log"
PROJECT_DIR="/root/.openclaw/workspace/tomato-novel"

# 记录日志
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# 检查 inkos 守护进程是否在运行
check_inkos_daemon() {
    if pgrep -f "inkos up" > /dev/null; then
        log "✅ inkos 守护进程正在运行"
        return 0
    else
        log "❌ inkos 守护进程已停止"
        return 1
    fi
}

# 检查 inkos 项目状态
check_inkos_status() {
    cd "$PROJECT_DIR" 2>/dev/null || {
        log "错误：无法进入项目目录 $PROJECT_DIR"
        return 1
    }
    
    # 检查书籍状态
    BOOKS=$(inkos book list 2>/dev/null)
    if [ $? -eq 0 ]; then
        log "📚 书籍状态："
        echo "$BOOKS" | while IFS= read -r line; do
            log "   $line"
        done
    else
        log "⚠️  无法获取书籍列表"
    fi
    
    # 检查章节数量
    if [ -d "books" ]; then
        for book_dir in books/*/; do
            if [ -d "${book_dir}chapters" ]; then
                CHAPTER_COUNT=$(find "${book_dir}chapters" -name "*.md" -o -name "*.json" 2>/dev/null | wc -l)
                BOOK_NAME=$(basename "$book_dir")
                log "  书籍 '$BOOK_NAME' 有 $CHAPTER_COUNT 个章节"
            fi
        done
    fi
}

# 重启 inkos 守护进程
restart_inkos_daemon() {
    log "🔄 正在重启 inkos 守护进程..."
    
    # 停止所有 inkos 进程
    pkill -f "inkos up" 2>/dev/null
    sleep 2
    
    # 启动守护进程
    cd "$PROJECT_DIR" && nohup inkos up > "$DAEMON_LOG" 2>&1 &
    
    sleep 5
    if check_inkos_daemon; then
        log "✅ inkos 守护进程重启成功"
    else
        log "❌ inkos 守护进程重启失败"
        # 尝试修复配置
        log "🔧 尝试修复配置..."
        fix_inkos_config
        # 再次尝试启动
        cd "$PROJECT_DIR" && nohup inkos up > "$DAEMON_LOG" 2>&1 &
        sleep 5
        if check_inkos_daemon; then
            log "✅ 修复后 inkos 守护进程启动成功"
        else
            log "❌ 修复后 inkos 守护进程仍无法启动"
        fi
    fi
}

# 修复 inkos 配置
fix_inkos_config() {
    log "🔧 检查并修复 inkos 配置..."
    
    # 检查 API 配置
    if [ ! -f "$PROJECT_DIR/.env" ]; then
        log "  创建缺失的 .env 文件"
        cat > "$PROJECT_DIR/.env" << EOF
# LLM Configuration
INKOS_LLM_PROVIDER=custom
INKOS_LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/coding/v3
INKOS_LLM_API_KEY=63589785-b399-47dd-8423-d2433938f169
INKOS_LLM_MODEL=deepseek-v3.2
EOF
    fi
    
    # 检查项目完整性
    if [ ! -d "$PROJECT_DIR/books" ]; then
        log "  项目目录不完整，尝试修复..."
        mkdir -p "$PROJECT_DIR/books"
    fi
}

# 主函数
main() {
    log "="*50
    log "开始监控 inkos..."
    
    # 检查守护进程
    if ! check_inkos_daemon; then
        log "⚠️  inkos 守护进程已停止，正在尝试重启..."
        restart_inkos_daemon
    else
        log "✅ inkos 守护进程运行正常"
    fi
    
    # 检查项目状态
    check_inkos_status
    
    log "监控完成"
    log "="*50
    echo ""
}

# 执行主函数
main