#!/usr/bin/env bash
# ============================================================================
#  B+助手 · 手机端一键装机（技术员用）
#
#  作用：一条命令完成 下载 → 安装 → 授权 → 开无障碍 → 电池白名单 → 自启动
#        → 放行自装更新（之后手机自己装新版本，不用再连电脑）
#        装完手机端权限全绿，② 无障碍在 App 里变成「点一下就自动开」。
#
#  用法：
#      bash bplus-install.sh                # 用统一入口下载
#      bash bplus-install.sh lvjun.bplus-home.com   # 用指定租户的下载源
#
#  前置：① 电脑装了 adb（Android Platform Tools）
#        ② 手机已开「开发者选项 → USB 调试」，并允许本电脑调试
# ============================================================================
set -u

HOST="${1:-www.bplus-home.com}"
PKG="com.example.aplusai"
SVC="${PKG}/${PKG}.APlusAccessibilityService"
APK="BplusCollector.apk"
URL="https://${HOST}/downloads/${APK}"
TMP="/tmp/${APK}"

echo "=============================================="
echo " B+助手 一键装机"
echo " 下载源: ${URL}"
echo "=============================================="

if ! command -v adb >/dev/null 2>&1; then
  echo "❌ 找不到 adb。请先安装 Android Platform Tools 并加入 PATH。"
  exit 1
fi
if ! adb devices | grep -q "device$"; then
  echo "❌ 没检测到手机。请：① 打开 USB 调试  ② 手机上点「允许调试」  ③ 重插数据线"
  adb devices
  exit 1
fi

echo
echo "① 下载安装包…"
if ! curl -fL --max-time 300 "$URL" -o "$TMP"; then
  echo "❌ 下载失败，检查网络或换个下载源（第二个参数传租户域名）"
  exit 1
fi
echo "   已下载 $(wc -c < "$TMP" | tr -d ' ') 字节"

echo
echo "② 安装（覆盖安装，保留已有配置）…"
if ! adb install -r "$TMP"; then
  echo "❌ 安装失败"
  exit 1
fi

echo
echo "③ 授予系统直写权限（让 App 内的 ② 无障碍 变成真一键）…"
adb shell pm grant "$PKG" android.permission.WRITE_SECURE_SETTINGS || true

echo
echo
echo "④ 放行 App 自装更新（内置更新用：之后手机自己下载安装新版本，不用连电脑）…"
adb shell "cmd appops set com.example.aplusai REQUEST_INSTALL_PACKAGES allow" >/dev/null 2>&1 || true
if adb shell "cmd appops get com.example.aplusai REQUEST_INSTALL_PACKAGES" 2>/dev/null | grep -qi allow; then
  echo "   已放行"
else
  echo "   ⚠ 未放行（老机型可能不支持 appops，手机上首次更新时手动开一次即可）"
fi

echo
echo "⑤ 加入电池优化白名单（防息屏被系统掐断）…"
adb shell "dumpsys deviceidle whitelist +${PKG}" >/dev/null 2>&1 || true

echo
echo "⑥ 放行自启动（小米 / HyperOS 私有 op 10008）…"
adb shell "cmd appops set ${PKG} 10008 allow" >/dev/null 2>&1 || true

echo
echo "⑦ 开启无障碍服务…"
CUR="$(adb shell "settings get secure enabled_accessibility_services" | tr -d '\r')"
case "$CUR" in
  *"$SVC"*) MERGED="$CUR" ;;
  ""|"null") MERGED="$SVC" ;;
  *) MERGED="${CUR}:${SVC}" ;;
esac
# 小米只认「值发生变化」才会重新绑定，所以必须先清空再写回
adb shell "settings put secure enabled_accessibility_services ''"
sleep 1
adb shell "settings put secure enabled_accessibility_services '${MERGED}'"
adb shell "settings put secure accessibility_enabled 1"

echo
echo "⑧ 启动 App…"
adb shell "monkey -p ${PKG} -c android.intent.category.LAUNCHER 1" >/dev/null 2>&1 || true
sleep 3

echo
echo "================ 结果自检 ================"
VER="$(adb shell "dumpsys package ${PKG}" | grep -m1 versionName | tr -d '\r' | sed 's/.*versionName=//')"
echo "版本      : ${VER:-未读到}"
echo -n "无障碍绑定: "
adb shell "dumpsys accessibility" | grep -m1 "Bound services" | tr -d '\r' | sed 's/^ *//'
echo -n "电池白名单: "
if adb shell "dumpsys deviceidle whitelist" 2>/dev/null | grep -q "$PKG"; then
  echo "已在列"
else
  echo "⚠ 未确认（可能需手动在设置里加）"
fi
echo "直写权限  : $(adb shell "dumpsys package ${PKG}" | grep -c 'WRITE_SECURE_SETTINGS: granted=true' | tr -d '\r')（1=已授予）"
echo -n "自装更新  : "
adb shell "cmd appops get ${PKG} REQUEST_INSTALL_PACKAGES" | tr -d '\r'
echo "==========================================="
echo
echo "✅ 完成。手机上打开 B+助手 → 扫码或粘贴绑定码即可开始采集。"
echo "   若上面「无障碍绑定」是空的：到设置里把 B+助手 的无障碍开关【关→开】一次。"
echo "   ④ 自启动 / 后台弹窗 仍建议在 App 向导里点一下确认（部分 ROM 需界面授权）。"
echo "   以后发新版本：手机会自己在后台下好并提示安装，不用再拿电脑跑这个脚本。"
