#!/usr/bin/env bash

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
BUILD_SCRIPT="${BUILD_SCRIPT:-$PROJECT_ROOT/scripts/build-public-release.sh}"
FRONTEND_DIR="${FRONTEND_DIR:-$PROJECT_ROOT/frontend}"
RELEASES_DIR="${RELEASES_DIR:-$FRONTEND_DIR/.deploy/releases}"
LATEST_RELEASE_LINK="${LATEST_RELEASE_LINK:-$RELEASES_DIR/latest}"
DEPLOY_REMOTE_HOST="${DEPLOY_REMOTE_HOST:-bent-db}"
DEPLOY_REMOTE_DIR="${DEPLOY_REMOTE_DIR:-/home/ontripge/domains/bent.ge/public}"

if [[ ! -x "$BUILD_SCRIPT" ]]; then
  echo "Build script is not executable or missing: $BUILD_SCRIPT" >&2
  exit 1
fi

case "$DEPLOY_REMOTE_DIR" in
  /home/ontripge/domains/*) ;;
  *)
    echo "Refusing to deploy outside /home/ontripge/domains: $DEPLOY_REMOTE_DIR" >&2
    exit 1
    ;;
esac

echo "==> Building fresh public release locally"
"$BUILD_SCRIPT"

if [[ ! -L "$LATEST_RELEASE_LINK" && ! -d "$LATEST_RELEASE_LINK" ]]; then
  echo "Latest release link not found: $LATEST_RELEASE_LINK" >&2
  exit 1
fi

LATEST_RELEASE_DIR="$(cd "$LATEST_RELEASE_LINK" && pwd)"

if [[ ! -f "$LATEST_RELEASE_DIR/index.html" ]]; then
  echo "Latest release does not look deployable: $LATEST_RELEASE_DIR" >&2
  exit 1
fi

echo "==> Ensuring remote target exists: ${DEPLOY_REMOTE_HOST}:${DEPLOY_REMOTE_DIR}"
ssh "$DEPLOY_REMOTE_HOST" "mkdir -p '$DEPLOY_REMOTE_DIR'"

echo "==> Deploying release to live"
rsync -az --delete "$LATEST_RELEASE_DIR/" "${DEPLOY_REMOTE_HOST}:${DEPLOY_REMOTE_DIR}/"

echo
echo "Live deploy complete:"
echo "  local release:  $LATEST_RELEASE_DIR"
echo "  remote target:  ${DEPLOY_REMOTE_HOST}:${DEPLOY_REMOTE_DIR}"
