#!/bin/sh
#
# Miner10KW 安装脚本
# 自动安装依赖 → 下载 IPK → 安装 IPK
#
# 用法:
#   ./setup.sh
#

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
log_info()  { echo -e "${GREEN}[INFO]${NC}  $1"; }
log_warn()  { echo -e "${YELLOW}[WARN]${NC}  $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_ok()    { echo -e "${GREEN}[ OK]${NC}  $1"; }

IPK_URL="http://space.allhex.com/bheato/10kw/Miner10KW.ipk"
IPK_FILE="/tmp/Miner10KW.ipk"

# 依赖列表 (包名:apt名 格式用于备用)
DEPS="libc libcurl4 libmosquitto-ssl libopenssl1.1 libpthread ca-bundle libmicrohttpd-ssl libubox20210516 libmbedtls12"

# 已知已安装的基础包
BASE_PKGS="libc libpthread"

# ========================================
# 1. 修复 opkg 源
# ========================================
fix_opkg_feeds() {
    log_info "Step 1/4: 修复 opkg 源..."

    if grep -q "21.02-SNAPSHOT" /etc/opkg/distfeeds.conf 2>/dev/null; then
        log_warn "检测到 SNAPSHOT 源，替换为 21.02.7..."
        sed -i 's/21.02-SNAPSHOT/21.02.7/g' /etc/opkg/distfeeds.conf
        log_ok "distfeeds.conf 已更新"
    else
        log_ok "distfeeds.conf 无需修改"
    fi
}

# ========================================
# 2. 检查已安装的包
# ========================================
check_installed() {
    pkg="$1"
    opkg list-installed 2>/dev/null | grep -q "^${pkg} " && return 0
    return 1
}

# ========================================
# 3. 安装单个依赖
# ========================================
install_dep() {
    pkg="$1"

    # 检查是否已安装
    if check_installed "$pkg"; then
        log_ok "${pkg} 已安装"
        return 0
    fi

    # 尝试安装
    log_info "安装 ${pkg}..."
    if opkg install "$pkg" 2>&1; then
        log_ok "${pkg} 安装成功"
        return 0
    fi

    log_error "${pkg} 安装失败"
    return 1
}

# ========================================
# 4. 安装 IPK
# ========================================
install_ipk() {
    log_info "Step 4/4: 下载并安装 Miner10KW..."

    if [ -f "$IPK_FILE" ]; then
        log_info "IPK 已存在: ${IPK_FILE} ($(ls -lh "$IPK_FILE" | awk '{print $5}'))"
    else
        log_info "下载 ${IPK_URL} ..."
        wget -O "$IPK_FILE" "$IPK_URL" || {
            log_error "下载失败！"
            return 1
        }
    fi

    log_info "安装 IPK..."
    if opkg install "$IPK_FILE" 2>&1; then
        log_ok "Miner10KW 安装成功！"
        return 0
    fi

    # 如果失败，尝试 --force-depends
    log_warn "标准安装失败，尝试 --force-depends..."
    if opkg install --force-depends "$IPK_FILE" 2>&1; then
        log_ok "Miner10KW 安装成功 (force-depends)"
        return 0
    fi

    log_error "安装失败！"
    return 1
}

# ========================================
# 显示当前状态
# ========================================
show_status() {
    echo ""
    echo "========== 依赖状态 =========="
    for pkg in $DEPS; do
        if echo "$BASE_PKGS" | grep -q "$pkg"; then
            echo "  ${pkg} (基础包，通常已装)"
        elif check_installed "$pkg"; then
            echo "  ${pkg} ✓"
        else
            echo "  ${pkg} ✗ 缺失"
        fi
    done
    echo ""
}

# ========================================
# 主流程
# ========================================
main() {
    echo ""
    echo "======================================"
    echo "  Miner10KW 安装脚本"
    echo "======================================"
    echo ""

    [ "$(id -u)" -ne 0 ] && log_error "请使用 root 权限" && exit 1

    show_status

    echo ""
    echo -n "是否继续安装? [Y/n]: "
    read -r CONFIRM
    [ "$CONFIRM" = "n" ] || [ "$CONFIRM" = "N" ] && exit 0

    # Step 1: 修复 opkg 源
    fix_opkg_feeds

    # Step 2: 更新 opkg
    log_info "Step 2/4: 更新 opkg..."
    opkg update || log_warn "opkg update 失败，继续尝试..."

    # Step 3: 安装依赖
    log_info "Step 3/4: 安装依赖..."
    FAILED=""
    for pkg in $DEPS; do
        install_dep "$pkg" || FAILED="${FAILED} ${pkg}"
    done

    if [ -n "$FAILED" ]; then
        echo ""
        log_warn "以下包未能安装:${FAILED}"
        log_info "将尝试 force-depends 安装 IPK..."
    else
        log_ok "所有依赖安装完成！"
    fi

    # Step 4: 安装 IPK
    if ! install_ipk; then
        echo ""
        log_error "安装失败，请手动排查。"
        log_info "可以尝试: opkg install --force-depends ${IPK_FILE}"
        exit 1
    fi

    echo ""
    echo "======================================"
    log_ok "安装完成！"
    echo "======================================"
    echo ""
}

main "$@"
