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

usage() {
  cat <<'EOF'
Build the signed Electron application installers for Windows arm64 and x64.

Usage:
  ./build-windows-installers.sh <version> [--build-only]

Electron Builder produces AgentTeam-<version>-win-arm64.exe,
AgentTeam-<version>-win-x64.exe, and one architecture-aware latest.yml from one
canonical application version.
The default mode uploads under agentteam/desktop/. --build-only skips upload.

Signing is enabled by default. For an unsigned host smoke test use:
  AGENTTEAM_WINDOWS_SIGN=0 ./build-windows-installers.sh <version> --build-only
EOF
}

detect_windows_sign_cert_sha1() {
  command -v powershell.exe >/dev/null 2>&1 || return 1
  powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "\
\$cert = Get-ChildItem Cert:\\CurrentUser\\My -CodeSigningCert | \
  Where-Object { \$_.HasPrivateKey -and \$_.Subject -like '*PingCAP*' } | \
  Sort-Object NotAfter -Descending | Select-Object -First 1; \
if (\$cert) { \$cert.Thumbprint }" | tr -d '\r' | sed -n '1p'
}

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=manual-owner-client-assets.lib.sh
source "${SCRIPT_DIR}/manual-owner-client-assets.lib.sh"

version="${1:-}"
if [[ -z "${version}" ]]; then
  usage >&2
  exit 1
fi
if [[ "${version}" == -h || "${version}" == --help ]]; then
  usage
  exit 0
fi
shift

build_only=0
while [[ $# -gt 0 ]]; do
  case "$1" in
    --build-only) build_only=1 ;;
    *) fail "unknown argument: $1" ;;
  esac
  shift
done

init_manual_owner_client_assets "${version}"
export AGENTTEAM_WINDOWS_SIGN="${AGENTTEAM_WINDOWS_SIGN:-1}"
if truthy "${AGENTTEAM_WINDOWS_SIGN}" &&
   [[ -z "${AGENTTEAM_WINDOWS_SIGN_CERT_SHA1:-}" && -z "${AGENTTEAM_WINDOWS_SIGN_CERT_SUBJECT:-}" ]]; then
  thumbprint="$(detect_windows_sign_cert_sha1 || true)"
  [[ -n "${thumbprint}" ]] && export AGENTTEAM_WINDOWS_SIGN_CERT_SHA1="${thumbprint}"
fi
build_windows_installer_assets
if [[ "${build_only}" -eq 0 ]]; then
  ensure_ks3util_bin
  upload_windows_installer_assets
fi
print_windows_installer_summary
