#!/usr/bin/env bash
set -u
# ============================================================
#  Python3 从零到脚本自动化 一键脚本（macOS / Linux / WSL）
#  公开源码，欢迎审查 —— 不放心可先复制给 AI 判断
# ============================================================

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"; }

# --------------------------------------------------
# 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
}

# --------------------------------------------------
# 2. 检测 Python3 是否已安装
# --------------------------------------------------
check_python3() {
  step "检查 Python3 环境..."
  local found=""
  for p in python3 python; do
    if command -v "$p" >/dev/null 2>&1; then
      local ver
      ver=$("$p" --version 2>&1)
      if echo "$ver" | grep -qE "3\.[0-9]+"; then
        found="$p"
        info "检测到 $ver"
        break
      fi
    fi
  done

  if [ -n "$found" ]; then
    PY="$found"
    return 0
  fi

  error "未找到 Python3！请先安装：\n"
  echo "  · Windows：去 https://www.python.org/downloads/ 下载，记得勾选 Add to PATH"
  echo "  · macOS：  brew install python3"
  echo "  · Ubuntu/Debian：sudo apt install python3 python3-venv python3-pip -y"
  echo "  · CentOS/Fedora：sudo dnf install python3 -y"
  echo ""
  echo "安装好后请重新运行本脚本。"
  return 1
}

# --------------------------------------------------
# 3. 创建虚拟环境
# --------------------------------------------------
setup_venv() {
  step "创建虚拟环境..."
  local venv_name=".venv"

  if [ -d "$venv_name" ]; then
    warn "虚拟环境 '$venv_name' 已存在，将复用"
  else
    if ! "$PY" -m venv "$venv_name"; then
      error "创建虚拟环境失败（pip 模块可能缺失，试试：sudo apt install python3-venv）"
      return 1
    fi
    info "虚拟环境创建成功：$venv_name/"
  fi

  # 获取虚拟环境内的 pip 路径
  if [ -f "$venv_name/bin/pip" ]; then
    PIP_CMD="$venv_name/bin/pip"
    ACTIVATE="$venv_name/bin/activate"
  elif [ -f "$venv_name/Scripts/pip" ]; then
    PIP_CMD="$venv_name/Scripts/pip"
    ACTIVATE="$venv_name/Scripts/activate"
  else
    error "找不到虚拟环境的 pip，目录结构异常"
    return 1
  fi

  VENV_PIP="$PIP_CMD"
  return 0
}

# --------------------------------------------------
# 4. pip 装库（带清华→阿里云→官方三重回退）
# --------------------------------------------------
install_package() {
  local pkg="$1"
  local net="$2"
  step "安装 $pkg ..."

  # 根据网络选择主镜像
  local primary_url
  if [ "$net" = "domestic" ]; then
    primary_url="https://pypi.tuna.tsinghua.edu.cn/simple"
  else
    primary_url="https://pypi.org/simple"
  fi

  # 备选源
  local backup_url="https://mirrors.aliyun.com/pypi/simple"

  # 第一次尝试：主镜像
  if $VENV_PIP install "$pkg" -i "$primary_url" --timeout 60 >/dev/null 2>&1; then
    info "$pkg 安装成功（源：$primary_url）"
    return 0
  fi

  warn "主源失败，回退到备用源：$backup_url"
  if $VENV_PIP install "$pkg" -i "$backup_url" --timeout 60 >/dev/null 2>&1; then
    info "$pkg 安装成功（源：$backup_url）"
    return 0
  fi

  warn "镜像源均失败，重试官方源（可能较慢）..."
  if $VENV_PIP install "$pkg" --timeout 120 >/dev/null 2>&1; then
    info "$pkg 安装成功（官方源）"
    return 0
  fi

  error "$pkg 安装失败。请手动检查："
  echo "  1. 网络连接是否正常"
  echo "  2. 虚拟环境是否已正确激活"
  echo "  3. 手动尝试：$VENV_PIP install $pkg"
  return 1
}

# --------------------------------------------------
# 5. 生成批量重命名示例脚本
# --------------------------------------------------
generate_rename_script() {
  step "生成批量重命名示例脚本..."

  cat > rename_samples.sh << 'RENAME_EOF'
#!/usr/bin/env bash
# 批量重命名示例：给指定目录下的文件加日期前缀
# 用法：bash rename_samples.sh [目标目录]
# 默认处理当前目录下的 .txt 文件

TARGET_DIR="${1:-.}"
PREFIX=$(date +%Y%m%d)

echo "正在处理目录：$TARGET_DIR"
COUNT=0

for file in "$TARGET_DIR"/*.txt; do
  [ -f "$file" ] || continue
  BASENAME=$(basename "$file")
  EXT="${BASENAME##*.}"
  NAME="${BASENAME%.*}"
  COUNT=$((COUNT + 1))
  NEW_NAME="${PREFIX}_$(printf '%03d' $COUNT).${EXT}"
  mv "$file" "$TARGET_DIR/$NEW_NAME"
  echo "  ${BASENAME} → ${NEW_NAME}"
done

echo "共重命名 $COUNT 个文件。"
RENAME_EOF

  chmod +x rename_samples.sh
  info "示例脚本已生成：rename_samples.sh"
  echo "  使用方法：bash rename_samples.sh ./your-folder"

  # 在当前目录下也创建一个测试用的 .txt 文件来演示效果
  echo "test content 1" > samples_sample_1.txt
  echo "test content 2" > samples_sample_2.txt
  echo "test content 3" > samples_sample_3.txt
  info "创建了 3 个测试文件用于演示"

  # 运行重命名脚本
  step "运行批量重命名演示..."
  bash rename_samples.sh .
}

# --------------------------------------------------
# 主流程
# --------------------------------------------------
main() {
  echo "============================================"
  echo "  Python3 从零到脚本自动化 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  check_python3 || exit 1

  setup_venv || exit 1

  install_package "requests" "$NET" || warn "requests 安装失败（可选，不影响后续演示）"

  generate_rename_script

  echo ""
  echo "============================================"
  info "全部完成！"
  echo ""
  echo "下一步指引："
  echo "  1. 激活虚拟环境：source .venv/bin/activate"
  echo "  2. 查看重命名结果：ls *.txt 或 ls *${DATESTAMP:-2*}"
  echo "  3. 卸载不需要的库：pip uninstall requests"
  echo "  4. 导出依赖清单：pip freeze > requirements.txt"
  echo "============================================"
}

main "$@"
