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

bazel build -c opt //mrjunejune:mrjunejune_server_bundle

bundle="$(realpath bazel-bin/mrjunejune/mrjunejune_server_bundle)"
staging="/opt/mrjunejune_server_bundle_new"
active="/opt/mrjunejune_server_bundle_active"

# Always create staging from an empty directory. Copying into an existing
# directory nests the bundle and can promote stale/incomplete runtime files.
sudo rm -rf "$staging"
sudo mkdir -p "$staging"
sudo cp -a "$bundle"/. "$staging"/
sudo mv \
  "$staging/mrjunejune_server" \
  "$staging/mrjunejune_server_binary"
sudo cp \
  "$staging/mrjunejune/production_entrypoint.sh" \
  "$staging/mrjunejune_server"

required_runtime=(
  "$staging/mrjunejune_server"
  "$staging/mrjunejune_server_binary"
  "$staging/mrjunejune/inference_stack.sh"
  "$staging/mrjunejune/inference_sidecar_launcher.sh"
  "$staging/mrjunejune/inference/copilot_sidecar.zip"
  "$staging/mrjunejune/inference/litellm_proxy.zip"
  "$staging/mrjunejune/inference/litellm_config.yaml"
  "$staging/+http_archive+copilot_cli_linux_x86_64/copilot"
  "$staging/rules_python++python+python_3_11_x86_64-unknown-linux-gnu/bin/python3"
)
for runtime_path in "${required_runtime[@]}"; do
  if [[ ! -e "$runtime_path" ]]; then
    echo "Deployment bundle is missing runtime: $runtime_path" >&2
    exit 1
  fi
done

sudo chmod +x \
  "$staging/mrjunejune_server" \
  "$staging/mrjunejune/inference_stack.sh" \
  "$staging/mrjunejune/inference_sidecar_launcher.sh" \
  "$staging/+http_archive+copilot_cli_linux_x86_64/copilot"
sudo chown -R mrjunejune_server:zenbu_team "$staging"

# Persistent database, config, and Copilot tokens stay outside the immutable
# bundle and survive swaps.
sudo mkdir -p /opt/data/mrjunejune/
sudo chown -R mrjunejune_server:zenbu_team /opt/data/mrjunejune/

# Swap
sudo rm -rf "$active"
sudo mv "$staging" "$active"

sudo systemctl restart mrjunejune_server.service
echo "Deployment complete!"
