#!/usr/bin/env bash

set -euo pipefail

require_root() {
  if [[ "${EUID}" -ne 0 ]]; then
    echo "请以 root 身份运行本脚本（使用 sudo）。" >&2
    exit 1
  fi
}

# 卸载 DKMS 中的 8821cu 模块并从内核卸载
remove_dkms_driver() {
  echo "尝试从 DKMS 中删除 8821cu 驱动..."

  if command -v dkms >/dev/null 2>&1; then
    # 列出所有 8821cu 版本，逐个删除
    mapfile -t versions < <(dkms status | awk '/8821cu/ {print $2}' | cut -d, -f1 | sort -u || true)
    if [[ "${#versions[@]}" -eq 0 ]]; then
      echo "DKMS 中未发现 8821cu 条目，跳过 dkms remove。"
    else
      for v in "${versions[@]}"; do
        echo "dkms remove -m 8821cu -v ${v} --all || true"
        dkms remove -m 8821cu -v "${v}" --all || true
      done
    fi
  else
    echo "系统无 dkms 命令，跳过 DKMS 卸载。"
  fi

  # 尝试卸载内核模块
  if lsmod | grep -q '^8821cu'; then
    echo "卸载内核模块 8821cu..."
    modprobe -r 8821cu || rmmod 8821cu || true
  else
    echo "内核模块 8821cu 未加载。"
  fi
}

# 删除黑名单配置、还原 initramfs
cleanup_blacklist() {
  local blacklist_conf="/etc/modprobe.d/wireless-usb-fix.conf"

  if [[ -f "${blacklist_conf}" ]]; then
    echo "删除黑名单配置 ${blacklist_conf}..."
    rm -f "${blacklist_conf}"
    echo "更新 initramfs..."
    update-initramfs -u || true
  else
    echo "未找到 ${blacklist_conf}，跳过删除。"
  fi
}

# 停用并删除 systemd 服务
remove_systemd_service() {
  local svc="load-wifi-comfast-8821cu.service"
  local svc_path="/etc/systemd/system/${svc}"

  if systemctl list-unit-files | grep -q "^${svc}"; then
    echo "停止并禁用 systemd 服务 ${svc}..."
    systemctl stop "${svc}" 2>/dev/null || true
    systemctl disable "${svc}" 2>/dev/null || true
  else
    echo "systemd 未发现服务 ${svc}，只尝试删除文件。"
  fi

  if [[ -f "${svc_path}" ]]; then
    echo "删除服务文件 ${svc_path}..."
    rm -f "${svc_path}"
    systemctl daemon-reload || true
  fi
}

# 尝试删除可能残留的源代码目录（如果还在）
remove_source_dir() {
  local script_dir
  script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

  local driver_dir="${script_dir}/8821cu-20210916-main"
  local package_dir="${script_dir}/package"

  # 这些目录在 update.sh 中已经 rm -rf 过，这里只是兜底
  if [[ -d "${driver_dir}" ]]; then
    echo "删除残留驱动目录：${driver_dir}"
    rm -rf "${driver_dir}"
  fi

  if [[ -d "${package_dir}" ]]; then
    echo "删除残留离线包目录：${package_dir}"
    rm -rf "${package_dir}"
  fi
}

# 打印状态，确认卸载结果
print_status() {
  echo "检查卸载后状态..."

  if command -v dkms >/dev/null 2>&1; then
    dkms status | grep -i 8821cu || echo "dkms 中已无 8821cu 条目。"
  else
    echo "当前系统无 dkms 命令，跳过 dkms 状态检查。"
  fi

  if lsmod | grep -q '^8821cu'; then
    echo "注意：内核模块 8821cu 仍然加载，可能需要重启后再确认。"
  else
    echo "内核模块 8821cu 未加载。"
  fi
}

main() {
  require_root

  remove_dkms_driver
  cleanup_blacklist
  remove_systemd_service
  remove_source_dir
  print_status

  echo
  echo "卸载脚本执行完毕。建议重启系统以确保状态完全生效。"
}

main "$@"