#!/usr/bin/env bash
set -u
# ============================================================
#  Linux 常用命令实战速查 — 一键脚本（macOS / Linux / WSL）
#  公开源码，欢迎审查 —— 不放心可先复制给 AI 判断
#  功能：检测网络环境 → 提示安装基础工具 → 输出机器摘要
#  不涉及 API Key（本主题纯本地工具教程，无需任何密钥）
# ============================================================

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
step()  { echo -e "${CYAN}[STEP]${NC} $1"; }

detect_network() {
  step "检测网络环境（国内 / 国外）..."
  if curl -fsI --max-time 5 "https://claude.ai" >/dev/null 2>&1; then
    info "可直连 claude.ai，判定为海外网络"
    echo "overseas"
  else
    warn "无法直连 claude.ai，判定为国内网络环境（将自动切换国内镜像源）"
    echo "domestic"
  fi
}

get_package_manager() {
  if command -v apt >/dev/null 2>&1; then
    echo "apt"; return 0
  elif command -v yum >/dev/null 2>&1; then
    echo "yum"; return 0
  elif command -v dnf >/dev/null 2>&1; then
    echo "dnf"; return 0
  elif command -v brew >/dev/null 2>&1; then
    echo "brew"; return 0
  else
    error "未检测到支持的包管理器（apt/yum/dnf/brew）。请手动安装基础工具。"
    return 1
  fi
}

install_tools() {
  local net="$1"
  local pm
  pm=$(get_package_manager) || exit 1

  step "检查并安装基础工具 (wget / curl / unzip / tree)..."

  local need_install=""

  # 逐个检查
  for tool in wget curl unzip tree; do
    if ! command -v "$tool" >/dev/null 2>&1; then
      need_install="$need_install $tool"
    else
      info "  $tool 已安装：$(command -v "$tool")"
    fi
  done

  if [ -z "$need_install" ]; then
    info "所有基础工具均已安装，跳过"
    return 0
  fi

  case "$pm" in
    apt|dnf)
      step "使用 $pm 安装：$need_install ..."
      # shellcheck disable=SC2086
      if ! sudo "$pm" install -y $need_install 2>/dev/null; then
        warn "$pm 安装失败，尝试备用方式..."
        if command -v curl >/dev/null 2>&1; then
          warn "缺少以下工具：$need_install"
          info "Debian/Ubuntu 用户手动执行："
          echo "    sudo apt install wget curl unzip tree"
          info "CentOS/RHEL 用户手动执行："
          echo "    sudo yum install wget curl unzip tree"
        else
          error "curl 也不可用，请通过浏览器打开 https://www.runoob.com/linux/linux-command-manual.html 查找各工具的安装方法"
          return 1
        fi
      fi
      ;;
    yum)
      step "使用 $pm 安装：$need_install ..."
      if ! sudo "$pm" install -y $need_install 2>/dev/null; then
        error "yum 安装失败。请手动执行：sudo yum install wget curl unzip tree"
        return 1
      fi
      ;;
    brew)
      step "使用 brew 安装：$need_install ..."
      if ! brew install $need_install 2>/dev/null; then
        error "brew 安装失败。请手动执行：brew install wget curl unzip tree"
        return 1
      fi
      ;;
  esac

  info "安装完成"
}

show_system_info() {
  step "收集系统信息（验证学以致用）..."
  echo ""
  echo "--- CPU ---"
  if command -v nproc >/dev/null 2>&1; then
    echo "逻辑核心数: $(nproc)"
  fi
  if command -v lscpu >/dev/null 2>&1; then
    lscpu 2>/dev/null | grep "Model name" | tr -s ' ' | cut -d: -f2 | sed 's/^ //'
  fi

  echo ""
  echo "--- 内存 ---"
  free -h 2>/dev/null || vm_stat 2>/dev/null || echo "（free 不可用）"

  echo ""
  echo "--- 磁盘 ---"
  df -h / 2>/dev/null

  echo ""
  echo "--- 操作系统 ---"
  if [ -f /etc/os-release ]; then
    . /etc/os-release
    echo "${PRETTY_NAME:-$(uname -s)} ($(uname -r))"
  else
    uname -a
  fi

  echo ""
  echo "--- 主机名 ---"
  hostname

  echo ""
  info "以上信息均可以通过本文所学的命令自行获取。"
  info "练习建议：试着用 ls/cd/pwd/df/ps/ssh 熟悉一下你的系统！"
  echo ""
}

main() {
  echo "============================================"
  echo "  Linux 常用命令实战速查 — 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  echo "网络环境: $NET"
  echo ""

  install_tools "$NET"
  show_system_info

  echo "============================================"
  info "全部完成！"
  echo "============================================"
  echo ""
  echo "下一步建议："
  echo "  1. 逐行阅读本文六个章节的命令，动手跑一遍"
  echo "  2. 尝试用 man <命令> 或 https://www.runoob.com/linux/linux-command-manual.html 查阅更多用法"
  echo "  3. 国内用户如需 AI 辅助学习，可访问 https://cloudzone-api.cyou/ （OpenAI 兼容、90+ 模型、国内直连、0.05x 起）"
}

main "$@"
