#!/usr/bin/env bash
# Комендант MDM — USB enrollment tool для macOS / Linux.
#
# Usage: ./enroll-mac.sh "komendant://enroll?code=...&server=...&mqtt=...&token=..."
#
# Требует:
#   - adb (Android SDK platform-tools в PATH, либо рядом со скриптом)
#   - komendant-dpc.apk в той же папке, что и скрипт
#   - USB-кабель + включённую USB-отладку на целевом устройстве

set -euo pipefail

root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
apk="$root/komendant-dpc.apk"
adb="${ADB:-$(command -v adb || echo "$root/adb")}"

link="${1:-}"
if [[ -z "$link" ]]; then
    read -r -p "Вставьте enrollment-ссылку (komendant://enroll?...): " link
fi
if [[ "$link" != komendant://enroll?* ]]; then
    echo "ERR: ссылка должна начинаться с komendant://enroll?" >&2
    exit 1
fi
[[ -f "$apk" ]] || { echo "ERR: $apk не найден" >&2; exit 1; }
[[ -x "$adb" ]] || { echo "ERR: adb не найден (положите рядом или установите platform-tools)" >&2; exit 1; }

echo "====================================================="
echo "  Комендант MDM — регистрация Android-устройства"
echo "====================================================="

echo "[1/6] ADB server..."
"$adb" start-server >/dev/null 2>&1

echo "[2/6] Проверка подключённого устройства..."
devices="$("$adb" devices | awk 'NR>1 && $2=="device"{print $1}')"
count="$(echo "$devices" | grep -c . || true)"
if [[ "$count" -eq 0 ]]; then
    echo "ERR: устройство не обнаружено. Проверьте кабель и USB-отладку." >&2
    exit 2
fi
serial="$(echo "$devices" | head -n1)"
echo "  OK: $serial"

echo "[3/6] Установка Комендант DPC..."
if ! "$adb" -s "$serial" install -r -g "$apk" >/dev/null; then
    echo "ERR: установка APK не удалась" >&2
    exit 3
fi
echo "  OK"

echo "[4/6] Назначаем DPC как Device Owner..."
if "$adb" -s "$serial" shell dpm set-device-owner 'ru.komendant.dpc/.admin.DeviceOwnerReceiver' 2>&1 | grep -q 'Success'; then
    mode="Device Owner"
else
    echo "  DO не удался, пробуем Profile Owner..."
    if "$adb" -s "$serial" shell dpm set-profile-owner 'ru.komendant.dpc/.admin.DeviceOwnerReceiver' 2>&1 | grep -q 'Success'; then
        mode="Profile Owner"
    else
        echo "ERR: ни DO, ни PO не удались — устройство не fresh (был Google-аккаунт или другой DPC)?" >&2
        echo "     Сделайте factory reset и не добавляйте Google-аккаунт в setup-wizard." >&2
        exit 4
    fi
fi
echo "  OK: $mode"

echo "[5/6] Открываем enrollment на устройстве..."
"$adb" -s "$serial" shell "am start -W -a android.intent.action.VIEW -n ru.komendant.dpc/.enrollment.EnrollmentActivity -d '$link'" >/dev/null

echo "[6/6] Ожидание применения политики + автоустановки корпоративных APK..."
echo "  Это может занять 3-10 минут на 4G и меньше минуты на Wi-Fi."
timeout=600
interval=15
elapsed=0
last_count=-1
while (( elapsed < timeout )); do
    sleep "$interval"
    elapsed=$((elapsed + interval))
    count="$("$adb" -s "$serial" shell pm list packages -3 2>/dev/null | grep -c '^package:' || true)"
    if [[ "$count" != "$last_count" ]]; then
        printf '  [%02d:%02d] установлено сторонних пакетов: %s\n' $((elapsed/60)) $((elapsed%60)) "$count"
        last_count="$count"
    fi
    if (( elapsed >= 90 )) && [[ "$count" == "$last_count" ]]; then break; fi
done

echo ""
echo "====================================================="
echo "  ГОТОВО — mode: $mode"
echo "  Установлено сторонних пакетов: $last_count"
echo "====================================================="
echo ""
echo "  1. На экране телефона примите согласие на обработку данных."
echo "  2. Устройство появится в админ-консоли через несколько секунд."
echo "  3. DPC автоматически доустановит корпоративные приложения в фоне."
