#!/bin/bash

# 停止Docker服务监控脚本

set -e

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

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 停止监控进程
stop_monitoring() {
    log_info "停止监控进程..."
    
    local monitor_pid_file="./storage/logs/monitor.pid"
    local stopped=false
    
    # 通过PID文件停止
    if [ -f "$monitor_pid_file" ]; then
        local monitor_pid=$(cat "$monitor_pid_file")
        if kill -0 $monitor_pid 2>/dev/null; then
            log_info "通过PID文件停止监控进程 (PID: $monitor_pid)"
            kill $monitor_pid
            sleep 2
            
            # 确认进程已停止
            if ! kill -0 $monitor_pid 2>/dev/null; then
                log_success "监控进程已停止"
                stopped=true
            else
                log_warning "监控进程未响应TERM信号，尝试强制停止..."
                kill -9 $monitor_pid 2>/dev/null || true
                sleep 1
                if ! kill -0 $monitor_pid 2>/dev/null; then
                    log_success "监控进程已强制停止"
                    stopped=true
                fi
            fi
        else
            log_warning "PID文件中的进程不存在"
        fi
        rm -f "$monitor_pid_file"
    fi
    
    # 通过进程名停止（备用方法）
    if [ "$stopped" = false ]; then
        log_info "通过进程名查找并停止监控进程..."
        local pids=$(pgrep -f "monitor-services.sh" || true)
        
        if [ -n "$pids" ]; then
            for pid in $pids; do
                log_info "停止监控进程 (PID: $pid)"
                kill $pid 2>/dev/null || true
            done
            
            sleep 2
            
            # 检查是否还有进程运行
            local remaining_pids=$(pgrep -f "monitor-services.sh" || true)
            if [ -n "$remaining_pids" ]; then
                log_warning "强制停止剩余的监控进程..."
                for pid in $remaining_pids; do
                    kill -9 $pid 2>/dev/null || true
                done
            fi
            
            log_success "所有监控进程已停止"
            stopped=true
        else
            log_info "未找到运行中的监控进程"
            stopped=true
        fi
    fi
    
    return 0
}

# 停止Docker服务
stop_services() {
    log_info "停止Docker服务..."
    
    if docker-compose ps -q | grep -q .; then
        docker-compose down
        log_success "Docker服务已停止"
    else
        log_info "没有运行中的Docker服务"
    fi
}

# 清理日志文件
cleanup_logs() {
    local cleanup_logs=$1
    
    if [ "$cleanup_logs" = true ]; then
        log_info "清理监控日志文件..."
        
        local log_files=(
            "./storage/logs/monitor.log"
            "./storage/logs/monitor-output.log"
            "./storage/logs/restart_counters"
        )
        
        for item in "${log_files[@]}"; do
            if [ -f "$item" ]; then
                rm -f "$item"
                log_info "删除文件: $item"
            elif [ -d "$item" ]; then
                rm -rf "$item"
                log_info "删除目录: $item"
            fi
        done
        
        log_success "日志文件清理完成"
    fi
}

# 显示使用帮助
show_help() {
    echo "停止Docker服务监控脚本"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  --stop-services           同时停止Docker服务"
    echo "  --cleanup-logs            清理监控日志文件"
    echo "  --all                     停止监控、服务并清理日志"
    echo "  -h, --help                显示此帮助信息"
    echo ""
    echo "默认情况下，此脚本只停止监控进程，不影响Docker服务。"
}

# 主函数
main() {
    local stop_services_flag=false
    local cleanup_logs_flag=false
    
    # 解析命令行参数
    while [[ $# -gt 0 ]]; do
        case $1 in
            --stop-services)
                stop_services_flag=true
                shift
                ;;
            --cleanup-logs)
                cleanup_logs_flag=true
                shift
                ;;
            --all)
                stop_services_flag=true
                cleanup_logs_flag=true
                shift
                ;;
            -h|--help)
                show_help
                exit 0
                ;;
            *)
                echo "未知选项: $1"
                show_help
                exit 1
                ;;
        esac
    done
    
    echo "========================================"
    echo "停止Docker服务监控"
    echo "时间: $(date)"
    echo "========================================"
    
    # 执行停止操作
    stop_monitoring
    
    if [ "$stop_services_flag" = true ]; then
        stop_services
    fi
    
    cleanup_logs "$cleanup_logs_flag"
    
    echo ""
    log_success "操作完成"
    
    if [ "$stop_services_flag" = false ]; then
        log_info "Docker服务仍在运行，使用 'docker-compose down' 停止服务"
    fi
}

# 如果脚本被直接执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi