#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

usage() {
  cat <<'EOF'
Uso:
  ./enroll-headwind-macos.sh [--serial SERIAL] [--apk /caminho/hmdm-os.apk] [--init-json /caminho/init.json] [--disable-adb]

Sem parâmetros, o script procura estes arquivos na própria pasta:
  platform-tools/adb, hmdm-os.apk e init.json

Este script só funciona em tablet novo ou já formatado. Ele NÃO transfere
um Device Owner existente e não deve ser usado enquanto o tablet tiver o Tuca
como Device Owner.
EOF
  exit 1
}

SERIAL=""
APK="${SCRIPT_DIR}/hmdm-os.apk"
INIT_JSON="${SCRIPT_DIR}/init.json"
DISABLE_ADB=false

while [[ $# -gt 0 ]]; do
  case "$1" in
    --serial) SERIAL="${2:-}"; shift 2 ;;
    --apk) APK="${2:-}"; shift 2 ;;
    --init-json) INIT_JSON="${2:-}"; shift 2 ;;
    --disable-adb) DISABLE_ADB=true; shift ;;
    -h|--help) usage ;;
    *) echo "Argumento desconhecido: $1"; usage ;;
  esac
done

if [[ -x "${SCRIPT_DIR}/platform-tools/adb" ]]; then
  ADB="${SCRIPT_DIR}/platform-tools/adb"
elif command -v adb >/dev/null 2>&1; then
  ADB="$(command -v adb)"
else
  echo "ADB não encontrado. Peça ao suporte a pasta completa do Kit Tuca."
  exit 1
fi

[[ -f "${APK}" ]] || { echo "APK não encontrado: ${APK}"; exit 1; }
[[ -f "${INIT_JSON}" ]] || { echo "init.json não encontrado: ${INIT_JSON}"; exit 1; }

if [[ -z "${SERIAL}" ]]; then
  DEVICES=()
  while IFS=$'\t' read -r candidate state; do
    [[ "${state}" == "device" ]] && DEVICES+=("${candidate}")
  done < <("${ADB}" devices | tail -n +2)

  if [[ "${#DEVICES[@]}" -ne 1 ]]; then
    echo "Conecte somente um tablet e aceite a mensagem de Depuração USB na tela dele."
    "${ADB}" devices
    exit 1
  fi
  SERIAL="${DEVICES[0]}"
fi

echo "Dispositivo selecionado: ${SERIAL}"
"${ADB}" -s "${SERIAL}" wait-for-device
[[ "$("${ADB}" -s "${SERIAL}" get-state)" == "device" ]] || { echo "O tablet não autorizou a Depuração USB."; exit 1; }

OWNER_INFO="$("${ADB}" -s "${SERIAL}" shell dpm get-device-owner 2>&1 || true)"
if [[ "${OWNER_INFO}" != *"No device owner" && "${OWNER_INFO}" == *"Owner" ]]; then
  echo "Este tablet já possui Device Owner. Formate-o antes de executar o enrollment."
  echo "${OWNER_INFO}"
  exit 1
fi

echo
echo "ATENÇÃO: confirme que este tablet foi resetado e não contém dados pendentes."
read -r -p "Digite ENROLL para continuar: " CONFIRMATION
[[ "${CONFIRMATION}" == "ENROLL" ]] || { echo "Cancelado."; exit 1; }

"${ADB}" -s "${SERIAL}" install "${APK}"
"${ADB}" -s "${SERIAL}" shell dpm set-device-owner com.hmdm.launcher/.AdminReceiver
"${ADB}" -s "${SERIAL}" push "${INIT_JSON}" /storage/emulated/0/Android/data/com.hmdm.launcher/files/init.json
"${ADB}" -s "${SERIAL}" shell am start com.hmdm.launcher
"${ADB}" -s "${SERIAL}" shell appops set com.hmdm.launcher SYSTEM_ALERT_WINDOW allow || echo "Aviso: não foi possível liberar sobreposição automaticamente."
"${ADB}" -s "${SERIAL}" shell appops set com.hmdm.launcher GET_USAGE_STATS allow || echo "Aviso: não foi possível liberar uso automaticamente."

echo
echo "Enrollment enviado. Aguarde o tablet aparecer no painel Headwind antes de desconectar."
if [[ "${DISABLE_ADB}" == true ]]; then
  "${ADB}" -s "${SERIAL}" shell 'settings put global development_settings_enabled 0; settings put global adb_enabled 0'
  echo "Depuração USB desativada."
else
  echo "Depois de confirmar no painel, desative a Depuração USB com:"
  echo "${ADB} -s ${SERIAL} shell 'settings put global development_settings_enabled 0; settings put global adb_enabled 0'"
fi
