#!/usr/bin/env bash
# First-time EC2 setup: install Docker, create directory structure, configure systemd
set -euo pipefail

echo "=== Helix EC2 Bootstrap ==="

# Install Docker
if ! command -v docker &>/dev/null; then
  echo "Installing Docker..."
  dnf update -y
  dnf install -y docker
  systemctl enable docker
  systemctl start docker
  usermod -aG docker ec2-user
fi

# Install Docker Compose plugin
if ! docker compose version &>/dev/null; then
  echo "Installing Docker Compose plugin..."
  DOCKER_CONFIG=/usr/libexec/docker/cli-plugins
  mkdir -p "$DOCKER_CONFIG"
  curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" \
    -o "$DOCKER_CONFIG/docker-compose"
  chmod +x "$DOCKER_CONFIG/docker-compose"
fi

# Install AWS CLI (if not present)
if ! command -v aws &>/dev/null; then
  echo "Installing AWS CLI..."
  dnf install -y aws-cli
fi

# Create application directory structure
echo "Creating /opt/helix directory structure..."
mkdir -p /opt/helix/{compose,env,scripts,releases}

# NOTE: compose files and scripts are delivered via S3 sync during deployment.
# See deploy-ec2.yml workflow for the delivery mechanism.

# Install systemd unit
cat > /etc/systemd/system/helix-compose.service <<'UNIT'
[Unit]
Description=Helix Docker Compose Application
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/helix/compose
EnvironmentFile=/opt/helix/compose/.env
ExecStart=/usr/bin/docker compose -f docker-compose.prod.yml up -d --remove-orphans
ExecStop=/usr/bin/docker compose -f docker-compose.prod.yml down
ExecReload=/usr/bin/docker compose -f docker-compose.prod.yml up -d --remove-orphans
TimeoutStartSec=120

[Install]
WantedBy=multi-user.target
UNIT

systemctl daemon-reload
systemctl enable helix-compose.service

echo "=== Bootstrap complete ==="
echo "Next steps:"
echo "  1. Run render-env.sh to fetch secrets from SSM"
echo "  2. Run pull-images.sh to pull container images"
echo "  3. Run deploy.sh <image-tag> to start the application"
