#!/bin/bash

# 设置四个时间段及对应的任务
declare -A TIME_SLOTS
TIME_SLOTS["22:00-06:00"]="night_task"
TIME_SLOTS["06:00-08:00"]="morning_task"
TIME_SLOTS["08:00-17:00"]="work_task"
TIME_SLOTS["17:00-22:00"]="evening_task"

# 获取当前时间
CURRENT_TIME=$(date +"%H:%M")

# 转换时间字符串为秒数
time_to_seconds() {
    local time_str=$1
    local hours=${time_str%:*}
    local minutes=${time_str#*:}
    # 使用10进制强制解析，避免0开头的数字被当作八进制
    echo $((10#${hours} * 3600 + 10#${minutes} * 60))
}

# 判断时间是否在指定范围内
is_time_in_range() {
    local current_time=$1
    local start_time=$2
    local end_time=$3

    local current_sec=$(time_to_seconds "$current_time")
    local start_sec=$(time_to_seconds "$start_time")
    local end_sec=$(time_to_seconds "$end_time")

    if [[ $start_sec -le $end_sec ]]; then
        # 不跨天
        [[ $current_sec -ge $start_sec && $current_sec -le $end_sec ]]
    else
        # 跨天
        [[ $current_sec -ge $start_sec || $current_sec -le $end_sec ]]
    fi
}

# 深夜任务
night_task() {
    echo "🌙 执行深夜任务..."
#    echo "1. 关闭非必要服务"
#    systemctl stop nginx 2>/dev/null || echo "nginx服务未运行"
#    echo "2. 启动备份任务"
#    echo "正在备份重要数据..." && sleep 2 && echo "备份完成"
#    echo "3. 降低系统功耗"
#    echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null 2>&1 || echo "已切换到节能模式"
    cp $QIDA/server/monitor/config_night.json $BASE/monitor/config.json

}

# 早晨任务
morning_task() {
    echo "🌅 执行早晨任务..."
 #   echo "1. 启动必要服务"
 #   systemctl start nginx 2>/dev/null && echo "nginx服务已启动" || echo "nginx服务启动失败"
    echo "2. 更新系统时间同步"
    ntpdate -s time.nist.gov 2>/dev/null && echo "系统时间已同步" || echo "时间同步完成"
    echo "3. 发送早报邮件通知"
    echo "今日天气晴朗，适合工作" | mail -s "每日早报" admin@example.com 2>/dev/null || echo "邮件发送功能不可用"
    cp $QIDA/server/monitor/config_morning.json $BASE/monitor/config.json
}

# 工作时间任务
work_task() {
    echo "☀️ 执行工作时间任务..."
    echo "1. 检查服务器状态"
    uptime && echo "负载正常"
    echo "2. 清理临时文件"
    find /tmp -type f -mtime +1 -delete 2>/dev/null && echo "临时文件清理完毕"
    echo "3. 监控磁盘空间"
    df -h | grep -E '^(Filesystem|/dev/)' && echo "磁盘监控完成"
    cp $QIDA/server/monitor/config_work.json $BASE/monitor/config.json
}

# 傍晚任务
evening_task() {
    echo "🌆 执行傍晚任务..."
    echo "1. 生成日报统计"
    echo "今日系统运行报告:" > daily_report.txt
    echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)%" >> /var/log/daily_report.txt
    echo "内存使用率: $(free | grep Mem | awk '{printf("%.2f%%"), $3/$2 * 100.0}')" >> /var/log/daily_report.txt
    echo "日报已生成: daily_report.txt"
    echo "2. 整理日志文件"
    log_dir="/var/log"
    find $log_dir -name "*.log" -size +10M -exec gzip {} \; 2>/dev/null && echo "大日志文件压缩完成"
    echo "3. 发送下班提醒"
    echo "辛苦一天了，记得保存工作进度！" | wall 2>/dev/null || echo "系统广播发送完成"
    cp $QIDA/server/monitor/config_evening.json $BASE/monitor/config.json
}

# 检查当前时间属于哪个时间段并执行对应任务
execute_scheduled_task() {
    for slot in "${!TIME_SLOTS[@]}"; do
        local start_time=${slot%-*}
        local end_time=${slot#*-}
        local task_function="${TIME_SLOTS[$slot]}"

        if is_time_in_range "$CURRENT_TIME" "$start_time" "$end_time"; then
            echo "当前时间: $CURRENT_TIME 属于时间段: $slot"
            echo "----------------------------------------"
            # 执行对应的任务函数
            $task_function
            echo "----------------------------------------"
            echo "任务执行完成"
            return 0
        fi
    done

    echo "当前时间: $CURRENT_TIME 不属于任何设定时间段"
    echo "执行默认维护任务..."
    work_task
    return 1
}

# 显示帮助信息
show_help() {
    echo "时间段任务调度脚本"
    echo "自动根据当前时间执行相应的预定任务"
    echo ""
    echo "时间段设置:"
    echo "  22:00-06:00  -> 深夜任务(关闭服务、备份、节能)"
    echo "  06:00-08:00  -> 早晨任务(启动服务、同步时间、发送早报)"
    echo "  08:00-17:00  -> 工作任务(检查状态、清理文件、监控磁盘)"
    echo "  17:00-22:00  -> 傍晚任务(生成报表、整理日志、下班提醒)"
    echo ""
    echo "用法: $0 [选项]"
    echo "  -h, --help     显示此帮助信息"
    echo "  不带参数运行将根据当前时间执行相应任务"
}

# 解析命令行参数
case "$1" in
    -h|--help)
        show_help
        exit 0
        ;;
    "")
        # 执行时间检查和任务调度
        execute_scheduled_task
        ;;
    *)
        echo "未知参数: $1"
        echo "使用 -h 或 --help 查看帮助信息"
        exit 1
        ;;
esac