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

: "${AGENTTEAM_PUBLIC_IP:?AGENTTEAM_PUBLIC_IP is required}"
: "${AGENTTEAM_RELEASE_ARCHIVE_PATH:?AGENTTEAM_RELEASE_ARCHIVE_PATH is required}"
: "${AGENTTEAM_SSH_PRIVATE_KEY_PATH:?AGENTTEAM_SSH_PRIVATE_KEY_PATH is required}"
: "${AGENTTEAM_SSH_KNOWN_HOSTS_PATH:?AGENTTEAM_SSH_KNOWN_HOSTS_PATH is required}"

readonly SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
readonly RELEASE_ARCHIVE_PATH="$AGENTTEAM_RELEASE_ARCHIVE_PATH"
readonly PUBLIC_IP="$AGENTTEAM_PUBLIC_IP"
readonly SSH_PRIVATE_KEY_PATH="$AGENTTEAM_SSH_PRIVATE_KEY_PATH"
readonly SSH_PORT="${AGENTTEAM_SSH_PORT:-2222}"
readonly SSH_USER="${AGENTTEAM_SSH_USER:-ubuntu}"
readonly KNOWN_HOSTS_PATH="$AGENTTEAM_SSH_KNOWN_HOSTS_PATH"
readonly REMOTE_RELEASE_PATH='/tmp/agentteam-release.tar.gz'

source "$SCRIPT_DIR/_lib.sh"

require_command scp
require_command ssh

if [[ ! -f "$RELEASE_ARCHIVE_PATH" ]]; then
  echo "release archive not found: $RELEASE_ARCHIVE_PATH" >&2
  exit 1
fi

if [[ ! -f "$SSH_PRIVATE_KEY_PATH" ]]; then
  echo "SSH private key not found: $SSH_PRIVATE_KEY_PATH" >&2
  exit 1
fi

agentteam_prepare_known_hosts "$KNOWN_HOSTS_PATH"
agentteam_build_ssh_options "$SSH_PRIVATE_KEY_PATH" "$SSH_PORT" "$KNOWN_HOSTS_PATH"
agentteam_wait_for_ssh "$SSH_USER" "$PUBLIC_IP" "$SSH_PORT"

agentteam_scp "$RELEASE_ARCHIVE_PATH" "$SSH_USER@$PUBLIC_IP:$REMOTE_RELEASE_PATH"
agentteam_ssh "$SSH_USER@$PUBLIC_IP" "sudo -n /usr/local/bin/agentteam-activate-release.sh '$REMOTE_RELEASE_PATH' && rm -f '$REMOTE_RELEASE_PATH'"
