#!/data/data/com.termux.files/usr/bin/bash
# =============================================================
# ota-recover.sh — QSB OTA 更新后一键恢复（必应 + Via）
# 用法: bash ota-recover.sh
# 检测：更新后 QSB 是原版/资源缺陷/已patch，自动选择修复路径
# =============================================================
set -u
TOOL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PKG="com.android.quicksearchbox"

info() { echo "» $*"; }
ok()   { echo "✓ $*"; }
die()  { echo "✗ $*" >&2; exit 1; }

need_root() { su -c 'id -u' 2>/dev/null | grep -q '^0$' || die "需要 root 权限"; }

get_adir() { su -c "pm path $PKG | sed 's/package://' | xargs dirname" 2>/dev/null; }

# ---------- 检测当前状态 ----------
check() {
  local adir vn res_ok patch_ok
  adir=$(get_adir)
  vn=$(su -c "dumpsys package $PKG | grep versionName | head -1" | sed 's/.*=//')
  # 资源完整性：检查已知缺陷文件（09024 缺 res/2A.xml / res/Hu1.xml）
  res_ok="未知"
  if su -c "unzip -l '$adir/base.apk' 2>/dev/null | grep -q 'res/2A.xml'"; then res_ok="完整"; fi
  # 是否已 patch
  patch_ok="原版"
  if su -c "unzip -p '$adir/base.apk' classes.dex 2>/dev/null | strings | grep -q 'mark.via'"; then patch_ok="已patch"; fi
  info "QSB 版本: $vn"
  info "资源: $res_ok | 跳转: $patch_ok"
}

# ---------- 方案A：已 patch 且资源完整 → 只需重刷引擎 ----------
recover_patched() {
  info "检测到已 patch 且资源完整，只需刷新引擎配置..."
  bash "$TOOL_DIR/qsb-tool.sh" engine bing
  ok "完成"
}

# ---------- 方案B：原版且资源完整 → 直接重打补丁 ----------
recover_clean() {
  info "检测到原版且资源完整，重新打补丁..."
  bash "$TOOL_DIR/qsb-tool.sh" refresh-backup
  bash "$TOOL_DIR/qsb-tool.sh" browser via
  bash "$TOOL_DIR/qsb-tool.sh" engine bing
  ok "完成"
}

# ---------- 方案C：资源缺陷（小米更新包 bug）→ 降级分区版 + 打补丁 ----------
recover_bad() {
  local adir
  adir=$(get_adir)
  info "检测到资源缺陷（小米更新包 bug），降级到分区版 + 打补丁..."
  # 备份当前
  su -c "cp '$adir/base.apk' /data/local/tmp/qsb_ota_bad.apk" 2>/dev/null
  # 移除缺陷更新包 → 回落分区版
  su -c "pm uninstall $PKG" 2>/dev/null
  sleep 2
  # 重新安装分区版（建立更新包）
  su -c "cp /product/priv-app/MIUIQuickSearchBox/MIUIQuickSearchBox.apk /data/local/tmp/qsb_part_orig.apk && chmod 644 /data/local/tmp/qsb_part_orig.apk"
  su -c "pm install -d -r /data/local/tmp/qsb_part_orig.apk" || die "分区版安装失败"
  # 打补丁（qsb-tool 会自动定位类）
  bash "$TOOL_DIR/qsb-tool.sh" refresh-backup
  bash "$TOOL_DIR/qsb-tool.sh" browser via
  bash "$TOOL_DIR/qsb-tool.sh" engine bing
  ok "降级 + 补丁完成"
}

# ---------- 主流程 ----------
need_root
check
local res_ok patch_ok
res_ok=$(su -c "unzip -l '$(get_adir)/base.apk' 2>/dev/null | grep -q 'res/2A.xml' && echo OK || echo BAD")
patch_ok=$(su -c "unzip -p '$(get_adir)/base.apk' classes.dex 2>/dev/null | strings | grep -q 'mark.via' && echo PATCHED || echo ORIG")
if [ "$patch_ok" = "PATCHED" ] && [ "$res_ok" = "OK" ]; then
  recover_patched
elif [ "$patch_ok" = "ORIG" ] && [ "$res_ok" = "OK" ]; then
  recover_clean
else
  recover_bad
fi
