#!/bin/bash
# omarchy:summary=Convert a vanilla package-based Omarchy install into OmarchyCN
# omarchy:examples=omarchy cn convert
# Curl-able bootstrap (like the overlay installer): everything before the
# package swap must run without the cn tree, so no $OMARCHY_PATH until then.

set -euo pipefail

GITEA=${GITEA:-https://git.zacharyzhang.com}
OWNER=${OWNER:-ZacharyZhang-NY}
REGISTRY="$GITEA/api/packages/$OWNER/arch"
REG_KEY_FPR=74DCF57ACD812B24D959F146BD386048867B33B4
STATE_DIR=/var/lib/omarchycn
STATE=$STATE_DIR/convert-state
# Bootstrap exception: curl|bash runs outside a session, so default the path
export OMARCHY_PATH=${OMARCHY_PATH:-/usr/share/omarchy}

main() {
  command -v pacman > /dev/null || { echo "需要 Arch Linux（未找到 pacman）" >&2; exit 1; }
  if (( EUID == 0 )); then
    echo "请以普通用户运行（脚本内部按需 sudo）" >&2
    exit 1
  fi

  local prev_omarchy prev_settings
  prev_omarchy=$(pacman -Q omarchy 2> /dev/null || pacman -Q omarchy-dev 2> /dev/null || true)
  prev_settings=$(pacman -Q omarchy-settings 2> /dev/null || pacman -Q omarchy-settings-dev 2> /dev/null || true)
  if [[ -z $prev_omarchy || -z $prev_settings ]]; then
    if [[ -d $HOME/.local/share/omarchy/.git ]]; then
      echo "检测到 checkout 安装（非包安装）：请改用 overlay（bin/omarchycn-install-overlay）" >&2
    else
      echo "未检测到 Omarchy 包安装（需要 omarchy 与 omarchy-settings）" >&2
    fi
    exit 1
  fi
  [[ -f $STATE ]] && echo "已转换过（$STATE 在案）：本次仅同步更新，不覆盖回退状态"

  echo "==> 信任 OmarchyCN registry 公钥并配置 [omarchycn] 仓库"
  local tmpkey
  tmpkey=$(mktemp)
  curl -fsSL "$REGISTRY/repository.key" -o "$tmpkey"
  sudo pacman-key --add "$tmpkey"
  sudo pacman-key --lsign-key "$REG_KEY_FPR"
  rm -f "$tmpkey"
  if ! grep -q '^\[omarchycn\]' /etc/pacman.conf; then
    printf '\n[omarchycn]\nSigLevel = Required DatabaseOptional\nServer = %s/omarchycn/x86_64\n' \
      "$REGISTRY" | sudo tee -a /etc/pacman.conf > /dev/null
  fi

  if [[ ! -f $STATE ]]; then
    echo "==> 记录转换前状态（供 omarchy cn revert 还原）"
    sudo mkdir -p "$STATE_DIR"
    if [[ -f /etc/locale.conf ]]; then
      sudo cp /etc/locale.conf "$STATE_DIR/locale.conf.pre"
    fi
    sudo cp /etc/pacman.d/mirrorlist "$STATE_DIR/mirrorlist.pre"
    local p new_pkgs=""
    for p in fcitx5-rime fcitx5-chinese-addons fcitx5-configtool omarchycn-keyring; do
      pacman -Q "$p" > /dev/null 2>&1 || new_pkgs+="$p "
    done
    # Values are quoted because revert sources this file; publish atomically
    {
      echo "prev_omarchy=\"${prev_omarchy%% *}\""
      echo "prev_settings=\"${prev_settings%% *}\""
      echo "new_pkgs=\"${new_pkgs% }\""
      echo "converted_at=\"$(date +%s)\""
    } | sudo tee "$STATE.new" > /dev/null
    sudo mv "$STATE.new" "$STATE"
  fi

  echo "==> 系统更新并换装 OmarchyCN 软件包（替换 ${prev_omarchy%% *}/${prev_settings%% *}）"
  sudo pacman -Syu --noconfirm
  sudo pacman -S --noconfirm omarchycn/omarchycn-keyring
  # --ask=4 auto-confirms removing the conflicting upstream omarchy packages
  sudo pacman -S --noconfirm --ask=4 omarchycn/omarchy-dev omarchycn/omarchy-settings-dev
  sudo pacman -S --needed --noconfirm fcitx5-rime fcitx5-chinese-addons fcitx5-configtool

  echo "==> [omarchy] 仓库启用自建镜像（Cloudflare 上游兜底）"
  source /usr/share/omarchy/cn/lib/mirror.sh
  cn_mirror_omarchy_repo_fix

  echo "==> 系统语言 zh_CN.UTF-8"
  grep -q '^zh_CN.UTF-8 UTF-8' /etc/locale.gen ||
    echo 'zh_CN.UTF-8 UTF-8' | sudo tee -a /etc/locale.gen > /dev/null
  sudo locale-gen > /dev/null
  if grep -q '^LANG=' /etc/locale.conf 2> /dev/null; then
    sudo sed -i 's/^LANG=.*/LANG=zh_CN.UTF-8/' /etc/locale.conf
  else
    echo 'LANG=zh_CN.UTF-8' | sudo tee -a /etc/locale.conf > /dev/null
  fi

  echo "==> 中文输入法与字体（用户级）"
  OMARCHY_PATH=/usr/share/omarchy bash /usr/share/omarchy/install/user/cn-chinese.sh
  systemctl --user restart omarchy-fcitx5.service 2> /dev/null || true

  echo "==> Arch 官方仓库切换国内镜像（自动测速，失败则保留现状）"
  omarchy-cn-mirror-apply china || echo "国内镜像不可达，保留当前 mirrorlist"

  echo "==> OMARCHY CN 开机画面"
  omarchy-refresh-plymouth

  omarchy-notification-send "OmarchyCN" "转换完成：重新登录后菜单/键位/输入法全中文" 2> /dev/null || true
  echo
  echo "转换完成（重新登录生效）。回退: omarchy cn revert"
}

main "$@"
