#!/bin/bash
#=====================================================
# 系统自动更新脚本 - 支持 CentOS/Ubuntu/Debian
# 来源: 整合自运维社区最佳实践
# 用法: sudo ./auto-update.sh [check|update]
#=====================================================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

MODE=${1:-check}
LOG_FILE="/var/log/auto-update.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

detect_os() {
    if [ -f /etc/redhat-release ]; then
        echo "centos"
    elif [ -f /etc/debian_version ]; then
        echo "debian"
    else
        echo "unknown"
    fi
}

OS=$(detect_os)
log "检测到系统: $OS"

check_updates() {
    case $OS in
        centos)
            yum check-update 2>/dev/null
            echo "可用更新数: $(yum check-update 2>/dev/null | grep -c '\.')"
            ;;
        debian)
            apt update -qq 2>/dev/null
            echo "可用更新数: $(apt list --upgradable 2>/dev/null | grep -c '/')"
            ;;
        *)
            echo -e "${RED}不支持的系统${NC}"
            exit 1
            ;;
    esac
}

do_update() {
    log "========== 开始系统更新 =========="
    case $OS in
        centos)
            log "执行: yum update -y"
            yum update -y 2>&1 | tee -a "$LOG_FILE"
            ;;
        debian)
            log "执行: apt update && apt upgrade -y"
            apt update -qq 2>&1 | tee -a "$LOG_FILE"
            apt upgrade -y 2>&1 | tee -a "$LOG_FILE"
            apt autoremove -y 2>&1 | tee -a "$LOG_FILE"
            ;;
    esac

    # 检查是否需要重启
    if [ -f /var/run/reboot-required ]; then
        log "需要重启系统"
        echo -e "${YELLOW}⚠ 系统需要重启以完成更新${NC}"
    fi

    log "========== 系统更新完成 =========="
}

case $MODE in
    check)
        echo -e "${GREEN}检查可用更新...${NC}"
        check_updates
        ;;
    update)
        echo -e "${GREEN}开始系统更新...${NC}"
        do_update
        echo -e "${GREEN}更新完成！${NC}"
        ;;
    *)
        echo "用法: $0 [check|update]"
        ;;
esac