#!/bin/bash
set -e

# ============================================
# CONFIG — change these values
# ============================================
GCP_PROJECT="swerte-nation"
GCP_ZONE="asia-east1-b"
GCP_MIG_NAME="swerte-nation-mig"
CI_COMMIT_SHORT_SHA="test-$(date +%Y%m%d%H%M%S)"

# ============================================
# AUTH — skip if already authenticated
# ============================================
# gcloud auth login
# gcloud config set project $GCP_PROJECT
gcloud config set project $GCP_PROJECT

echo "============================================"
echo "STEP 1 — Delete old builder VM if exists"
echo "============================================"
- gcloud compute instances delete swerte-builder --zone=$GCP_ZONE --quiet 2>/dev/null || true

echo "============================================"
echo "STEP 2 — Create builder VM"
echo "============================================"
gcloud compute instances create swerte-builder \
  --zone=$GCP_ZONE \
  --machine-type=e2-standard-2 \
  --image-family=ubuntu-minimal-2404-lts-amd64 \
  --image-project=ubuntu-os-cloud \
  --boot-disk-size=20GB \
  --scopes=cloud-platform

echo "Waiting 60 seconds for VM to boot..."
sleep 60

echo "============================================"
echo "STEP 3 — Run setup on builder VM"
echo "============================================"
gcloud compute ssh swerte-builder --zone=$GCP_ZONE \
  --command='
    set -e
    export HOME=/root
    export COMPOSER_ALLOW_SUPERUSER=1
    export DEBIAN_FRONTEND=noninteractive

    echo "--- Installing dependencies ---"
    sudo apt-get update -y
    sudo apt-get install -y software-properties-common nano
    sudo add-apt-repository -y ppa:ondrej/php
    sudo apt-get update -y

    sudo apt-get install -y \
      apache2 \
      php8.4 php8.4-cli php8.4-fpm \
      php8.4-mysql php8.4-xml php8.4-curl \
      php8.4-mbstring php8.4-intl php8.4-zip \
      php8.4-gd php8.4-bcmath \
      unzip git curl

    echo "--- Installing Node.js 20 ---"
    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
    sudo apt-get install -y nodejs

    echo "--- Setting timezone ---"
    sudo timedatectl set-timezone Asia/Manila
    sudo sed -i "s|;date.timezone =|date.timezone = Asia/Manila|" /etc/php/8.4/fpm/php.ini
    sudo sed -i "s|;date.timezone =|date.timezone = Asia/Manila|" /etc/php/8.4/cli/php.ini

    echo "--- Enabling Apache modules ---"
    sudo a2enmod rewrite headers expires deflate proxy_fcgi setenvif
    sudo a2enconf php8.4-fpm

    echo "--- Installing Composer ---"
    curl -sS https://getcomposer.org/installer | php
    sudo mv composer.phar /usr/local/bin/composer
    sudo chmod +x /usr/local/bin/composer

    echo "--- Cloning repo ---"
    sudo rm -f /var/www/html/index.html
    sudo git clone "https://gitlab-deploy-token:gldt-uuGyUdjRm-t_VdQ4e9-9@gitlab.com/mrkong.villanueva/vk.git" /var/www/html

    echo "--- Setting up .env ---"
    gcloud secrets versions access latest --secret="symfony-env" | sudo tee /var/www/html/.env

    echo "--- Composer install ---"
    cd /var/www/html
    sudo COMPOSER_HOME=/root composer install --no-dev --optimize-autoloader --no-interaction

    echo "--- Node + assets ---"
    sudo npm ci
    sudo php bin/console importmap:install
    sudo php bin/console asset-map:compile

    echo "--- Symfony cache ---"
    sudo php bin/console cache:clear --env=prod
    sudo php bin/console cache:warmup --env=prod
    sudo chown -R www-data:www-data /var/www/html
    sudo chmod -R 755 /var/www/html
    sudo chmod -R 775 /var/www/html/var

    echo "--- Apache virtual host ---"
    sudo bash -c "cat > /etc/apache2/sites-available/betting.conf << '"'"'APACHEEOF'"'"'
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public
    <Directory /var/www/html/public>
        AllowOverride All
        Require all granted
        Options -Indexes +FollowSymLinks
    </Directory>
    ErrorLog \${APACHE_LOG_DIR}/betting-error.log
    CustomLog \${APACHE_LOG_DIR}/betting-access.log combined
</VirtualHost>
APACHEEOF"

    echo "--- Health check ---"
    echo '"'"'<?php http_response_code(200); echo "OK";'"'"' | sudo tee /var/www/html/public/health.php

    echo "--- Doctrine migrations ---"
    cd /var/www/html
    sudo php bin/console doctrine:migrations:migrate --no-interaction --env=prod

    echo "--- Enable site ---"
    sudo a2dissite 000-default
    sudo a2ensite betting
    sudo systemctl restart php8.4-fpm
    sudo systemctl restart apache2
    sudo systemctl enable apache2
    sudo systemctl enable php8.4-fpm

    echo "✅ Builder VM setup complete"
  '

echo "============================================"
echo "STEP 4 — Stop builder VM"
echo "============================================"
gcloud compute instances stop swerte-builder --zone=$GCP_ZONE

echo "============================================"
echo "STEP 5 — Create image"
echo "============================================"
gcloud compute images create swerte-image-$CI_COMMIT_SHORT_SHA \
  --source-disk=swerte-builder \
  --source-disk-zone=$GCP_ZONE \
  --family=swerte-nation-app

echo "============================================"
echo "STEP 6 — Delete builder VM"
echo "============================================"
gcloud compute instances delete swerte-builder --zone=$GCP_ZONE --quiet

echo "============================================"
echo "STEP 7 — Create instance template"
echo "============================================"
gcloud compute instance-templates create swerte-template-$CI_COMMIT_SHORT_SHA \
  --machine-type=e2-standard-2 \
  --image=swerte-image-$CI_COMMIT_SHORT_SHA \
  --image-project=$GCP_PROJECT \
  --tags=http-server,https-server \
  --scopes=cloud-platform

echo "============================================"
echo "STEP 8 — Stop autoscaler"
echo "============================================"
gcloud compute instance-groups managed stop-autoscaling $GCP_MIG_NAME --zone=$GCP_ZONE || true

echo "============================================"
echo "STEP 9 — Rolling update"
echo "============================================"
gcloud compute instance-groups managed rolling-action start-update $GCP_MIG_NAME \
  --zone=$GCP_ZONE \
  --version=template=swerte-template-$CI_COMMIT_SHORT_SHA \
  --max-unavailable=0 \
  --max-surge=1

echo "============================================"
echo "STEP 10 — Wait for stable"
echo "============================================"
gcloud compute instance-groups managed wait-until $GCP_MIG_NAME \
  --stable \
  --zone=$GCP_ZONE \
  --timeout=1800

echo "============================================"
echo "STEP 11 — Re-enable autoscaler"
echo "============================================"
gcloud compute instance-groups managed set-autoscaling $GCP_MIG_NAME \
  --zone=$GCP_ZONE \
  --max-num-replicas=3 \
  --min-num-replicas=1 \
  --target-cpu-utilization=0.60 \
  --cool-down-period=60

echo ""
echo "✅ DEPLOY COMPLETE!"
echo "Template: swerte-template-$CI_COMMIT_SHORT_SHA"
