#!/usr/bin/env bash
set -u
# ============================================================
#  Vim 编辑器实战入门 一键脚本（macOS / Linux / WSL）
#  公开源码，欢迎审查 —— 不放心可先复制给 AI 判断
#  功能：检测是否安装 Vim → 未装则自动安装 → 生成基础 .vimrc
# ============================================================

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
}

check_vim() {
  if command -v vim >/dev/null 2>&1; then
    info "Vim 已安装：$(vim --version | head -1)"
    return 0
  fi
  warn "未检测到 Vim，将自动安装..."
  return 1
}

install_vim() {
  local net="$1"
  step "安装 Vim..."

  if command -v apt-get >/dev/null 2>&1; then
    # Debian / Ubuntu
    info "检测到 apt 包管理器"
    if [ "$net" = "domestic" ]; then
      info "尝试使用国内镜像源安装..."
      if sudo sed -i.bak 's|http://archive.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null; then
        sudo apt-get update --allow-releaseinfo-change -o Dir::Etc::sourcelist="sources.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" 2>/dev/null || true
      fi
    fi
    if sudo apt-get install -y vim >/dev/null 2>&1; then
      info "Vim 安装成功（apt）"
      return 0
    fi
    warn "主源失败，回退官方源重试..."
    if sudo apt-get install -y vim >/dev/null 2>&1; then
      info "Vim 安装成功（官方源）"
      return 0
    fi
  elif command -v yum >/dev/null 2>&1 || command -v dnf >/dev/null 2>&1; then
    # CentOS / RHEL / Fedora
    local pkg_mgr="yum"
    command -v dnf >/dev/null 2>&1 && pkg_mgr="dnf"
    info "检测到 $pkg_mgr 包管理器"
    if sudo $pkg_mgr install -y vim-enhanced >/dev/null 2>&1; then
      info "Vim 安装成功（$pkg_mgr）"
      return 0
    fi
    warn "$pkg_mgr 安装失败，回退重试..."
    if sudo $pkg_mgr install -y vim >/dev/null 2>&1; then
      info "Vim 安装成功（$pkg_mgr 备用）"
      return 0
    fi
  elif command -v brew >/dev/null 2>&1; then
    # macOS Homebrew
    info "检测到 Homebrew"
    if brew install vim >/dev/null 2>&1; then
      info "Vim 安装成功（Homebrew）"
      return 0
    fi
  elif command -v pacman >/dev/null 2>&1; then
    # Arch Linux
    if sudo pacman -Sy --noconfirm vim >/dev/null 2>&1; then
      info "Vim 安装成功（pacman）"
      return 0
    fi
  fi

  error "所有安装方式均失败。请手动执行："
  echo "  · Debian/Ubuntu: sudo apt-get install vim"
  echo "  · CentOS/RHEL:   sudo yum install vim-enhanced"
  echo "  · Fedora:        sudo dnf install vim"
  echo "  · macOS:         brew install vim"
  echo "  · Arch Linux:    sudo pacman -Sy vim"
  echo "  · 或试试云间中转站线上学习（https://cloudzone-api.cyou/，90+ 模型按量计费）"
  return 1
}

setup_vimrc() {
  step "生成基础 .vimrc 配置文件..."
  local vimrc="$HOME/.vimrc"

  if [ -f "$vimrc" ]; then
    warn "发现已有 $vimrc，备份为 ${vimrc}.bak.$(date +%Y%m%d%H%M%S)"
    cp "$vimrc" "${vimrc}.bak.$(date +%Y%m%d%H%M%S)"
  fi

  cat > "$vimrc" << 'VIMEOF'
" ---------- 行号 ----------
set number
" set relativenumber  " 进阶：相对行号，方便 jjjdd 删行

" ---------- 缩进 ----------
set tabstop=2
set shiftwidth=2
set expandtab       " Tab 键输出空格而非制表符

" ---------- 视觉反馈 ----------
set cursorline      " 高亮当前行，方便定位
set hlsearch        " 搜索结果高亮
set incsearch       " 输入搜索词时即时匹配

" ---------- 其他实用设置 ----------
set showmatch       " 输入括号时短暂跳到匹配的括号
set mouse=a         " 启用鼠标（滚轮翻页、点击跳转）
set backspace=indent,eol,start  " 退格键在插入模式下正常工作
syntax on           " 开启语法高亮
VIMEOF

  info ".vimrc 已生成：$vimrc"
  echo "  如果想让当前会话也生效，在 Vim 中输入 :source ~/.vimrc"
}

main() {
  echo "============================================"
  echo "  Vim 编辑器实战入门 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "============================================"
  echo ""

  if check_vim; then
    info "跳过安装步骤"
  else
    local NET
    NET=$(detect_network)
    if ! install_vim "$NET"; then
      error "Vim 安装失败。请先手动安装后再运行本脚本以生成 .vimrc。"
      exit 1
    fi
  fi

  setup_vimrc

  echo ""
  echo "============================================"
  info "全部完成！"
  echo "  快速测试：vim test.txt  （按 i 编辑，Esc 后 :wq 保存退出）"
  echo "  配置文件：$HOME/.vimrc"
  echo "  练习建议：第一天只用 hjkl 移动，第二天加 dd/yy/p"
  echo "============================================"
}

main "$@"
