#!/bin/bash

is_pipe() {
    [ -t 0 ] && return 1 || return 0
}

# 设置颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'  # No Color

# 确保脚本以root权限运行
check_root() {
  if [ "$(id -u)" != "0" ]; then
    echo -e "${RED}此脚本需要root权限${NC}" 1>&2
    exit 1
  fi
}

# 更新软件源
update_sources() {
  echo -e "${YELLOW}正在更新软件源，请稍候...${NC}"
  apt update -y
  echo -e "${GREEN}软件源更新完成！${NC}"
}

# 升级所有包，保留本地修改的配置文件
upgrade_packages() {
  echo -e "${YELLOW}正在升级所有软件包，请稍候...${NC}"
  apt upgrade -y --option=Dpkg::Options::="--force-confold"
  echo -e "${GREEN}软件包升级完成！${NC}"
}

# 安装常用工具和软件包
install_tools() {
  echo -e "${YELLOW}正在安装常用工具和软件包，请稍候...${NC}"
  apt install wget curl sudo vim git sl -y
  mv /usr/games/sl /usr/bin/sl
  echo "alias sl='sl -e'" >> /etc/profile
  echo -e "${GREEN}常用工具和软件包安装完成！${NC}"
}

# 备份并去除python增强
remove_python_enhancements() {
  echo -e "${YELLOW}正在备份并去除 Python 增强功能，请稍候...${NC}"
  PYTHON_LIB_DIR=$(ls /usr/lib/ | grep -E '^python3\.[0-9]+$' | sort -V | tail -n 1)
  cp /usr/lib/$PYTHON_LIB_DIR/EXTERNALLY-MANAGED /usr/lib/$PYTHON_LIB_DIR/EXTERNALLY-MANAGED.bk
  rm /usr/lib/$PYTHON_LIB_DIR/EXTERNALLY-MANAGED
  echo -e "${GREEN}Python 增强功能已移除！${NC}"
}

# 允许root用户远程登录，并允许密码登录
configure_ssh() {
  echo -e "${YELLOW}正在配置 SSH，请稍候...${NC}"
  sed -i 's/#\?PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config
  sed -i 's/#\?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config
  systemctl restart sshd
  echo -e "${GREEN}SSH 配置完成！${NC}"
}

# 检查并设置时区为Asia/Shanghai
check_and_set_timezone() {
  echo -e "${YELLOW}正在检查并设置时区，请稍候...${NC}"
  current_timezone=$(timedatectl show --property=Timezone --value)
  if [ "$current_timezone" != "Asia/Shanghai" ]; then
    if timedatectl set-timezone Asia/Shanghai 2>/dev/null; then
      echo -e "${GREEN}时区已修改为 Asia/Shanghai。${NC}"
    else
      echo -e "${RED}错误：无法修改时区。${NC}"
    fi
  else
    echo -e "${GREEN}时区已经是 Asia/Shanghai。${NC}"
  fi
}

# 检查、安装和配置 systemd-timesyncd 服务
setup_timesyncd() {
  echo -e "${YELLOW}正在检查、安装和配置 systemd-timesyncd 服务，请稍候...${NC}"

  # 确保`timesyncd`服务可用
  if ! systemctl is-active --quiet systemd-timesyncd; then
    echo -e "${YELLOW}需要启用 systemd-timesyncd 服务${NC}"
    if apt-get update && apt-get install -y --option=Dpkg::Options::="--force-confold" systemd-timesyncd; then
      echo -e "${GREEN}systemd-timesyncd 服务已启用。${NC}"
    else
      echo -e "${RED}错误：systemd-timesyncd 服务安装失败。${NC}"
      return 1
    fi
  fi

  # 判断服务器位置并配置NTP服务器
  if ping -c 1 google.com &> /dev/null; then
    echo -e "${YELLOW}服务器可能位于国外，配置国际NTP服务器${NC}"
    ntp_servers=("time.cloudflare.com" "time.facebook.com" "time.google.com")
  else
    echo -e "${YELLOW}服务器可能位于中国，配置中国NTP服务器${NC}"
    ntp_servers=("ntp.aliyun.com" "ntp2.tencent.com")
  fi

  # 更新 timesyncd 配置文件
  {
    echo "[Time]"
    printf "NTP=%s\n" "${ntp_servers[@]}"
    echo "FallbackNTP=ntp.ubuntu.com"
  } > /etc/systemd/timesyncd.conf

  echo -e "${GREEN}timesyncd 配置文件已更新。${NC}"
}

# 重启 systemd-timesyncd 服务并检查时间同步状态
restart_and_check_timesyncd() {
  echo -e "${YELLOW}正在重启 systemd-timesyncd 服务并检查时间同步状态，请稍候...${NC}"
  if systemctl restart systemd-timesyncd; then
    echo -e "${GREEN}systemd-timesyncd 服务已重启。${NC}"
  else
    echo -e "${RED}错误：无法重启 systemd-timesyncd 服务。${NC}"
    return 1
  fi

  # 等待一段时间让 timesyncd 服务同步
  sleep 10

  # 检查时间同步状态
  if timedatectl show-timesync --value --property=NTPSynchronized; then
     echo -e "${GREEN}时间同步正常。${NC}"
  else
    echo -e "${RED}时间同步可能有问题，请手动检查。${NC}"
  fi
}

# 安装 uv
install_uv() {
  echo -e "${YELLOW}正在安装 uv，请稍候...${NC}"
  curl -LsSf https://astral.sh/uv/install.sh | sh
  echo -e "${GREEN}uv 安装完成！${NC}"
}

# 安装 Python 3
install_python3() {
  echo -e "${YELLOW}正在安装 Python 3，请稍候...${NC}"
  apt install -y python3 python3-pip
  echo -e "${GREEN}Python 3 安装完成！${NC}"
}

# 交互式函数
interactive_choices() {
  local disable_ipv6=false
  local install_uv=true  # 默认安装 uv

  if ! is_pipe; then
    read -p "是否禁用 IPv6？(y/n): " choice
    [[ $choice =~ ^[Yy]$ ]] && disable_ipv6=true

    read -p "是否安装 uv (Python 替代品)，不安装则安装python？默认是 (y/n): " choice
    [[ $choice =~ ^[Nn]$ ]] && install_uv=false
  else
    echo "脚本通过管道执行，使用默认选项：不禁用 IPv6，安装 uv"
  fi

  if $disable_ipv6; then
    echo -e "${YELLOW}正在禁用 IPv6，请稍候...${NC}"
    echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf && sysctl -p
    echo -e "${GREEN}IPv6 已禁用！${NC}"
  fi

  if $install_uv; then
    install_uv
  else
    install_python3
  fi
}

# 主函数
main() {
  check_root
  update_sources
  upgrade_packages
  install_tools
  remove_python_enhancements
  configure_ssh
  check_and_set_timezone
  setup_timesyncd
  restart_and_check_timesyncd
  echo -e "${GREEN}初始化完成，请退出终端重新连接${NC}"
}

# 执行主函数
main
