#!/bin/bash
# ════════════════════════════════════════════════════════════════════
# Zero-downtime deployment script untuk PT. Sarana Gemilang
# Usage: ./deploy.sh <branch-or-tag>
# Contoh: ./deploy.sh main      atau     ./deploy.sh v1.1.0
# ════════════════════════════════════════════════════════════════════
set -e  # Exit on error

BRANCH="${1:-main}"
APP_DIR="/var/www/sarana-gemilang"
REPO_URL="git@github.com:YOUR_USERNAME/sarana-gemilang.git"  # ← GANTI
RELEASES_DIR="$APP_DIR/releases"
SHARED_DIR="$APP_DIR/shared"
NEW_RELEASE="$(date +%Y-%m-%d_%H-%M-%S)"
NEW_DIR="$RELEASES_DIR/$NEW_RELEASE"

echo "════════════════════════════════════════════════════════════"
echo "🚀 Deploy PT. Sarana Gemilang — Branch/Tag: $BRANCH"
echo "📁 Release: $NEW_RELEASE"
echo "════════════════════════════════════════════════════════════"

# 1. Clone code segar
echo "📥 Cloning $BRANCH..."
mkdir -p "$RELEASES_DIR"
git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$NEW_DIR"

# 2. Install dependencies
echo "📦 Installing dependencies (frontend)..."
cd "$NEW_DIR"
npm ci --omit=dev --prefer-offline

echo "📦 Installing dependencies (backend)..."
cd "$NEW_DIR/backend"
npm ci --omit=dev --prefer-offline

# 3. Symlink shared files (.env, uploads, logs)
echo "🔗 Linking shared files..."
ln -nfs "$SHARED_DIR/.env" "$NEW_DIR/backend/.env"
ln -nfs "$SHARED_DIR/uploads" "$NEW_DIR/uploads"
ln -nfs "$SHARED_DIR/logs" "$NEW_DIR/logs"

# 4. Generate Prisma client + migrate
echo "🗄️  Running Prisma migrations..."
cd "$NEW_DIR/backend"
npx prisma generate
npx prisma migrate deploy

# 5. Build frontend
echo "🏗️  Building frontend..."
cd "$NEW_DIR"
npm run build

# 6. Atomic switch — downtime ~50ms
echo "⚡ Atomic switch ke release baru..."
ln -nfs "$NEW_DIR" "$APP_DIR/current_new"
mv -Tf "$APP_DIR/current_new" "$APP_DIR/current"

# 7. Reload PM2 (zero-downtime)
echo "♻️  Reloading PM2..."
pm2 reload sarana-gemilang --update-env

# 8. Health check
echo "🏥 Health check..."
sleep 3
if curl -fs http://localhost:3001/health > /dev/null; then
  echo "✅ Health check OK"
else
  echo "❌ Health check FAILED — rollback dianjurkan!"
  exit 1
fi

# 9. Cleanup release lama (sisakan 5 terbaru untuk rollback)
echo "🧹 Cleanup old releases (keep last 5)..."
cd "$RELEASES_DIR"
ls -tdr */ | head -n -5 | xargs -r rm -rf

echo ""
echo "════════════════════════════════════════════════════════════"
echo "✅ Deploy SUKSES! Release: $NEW_RELEASE"
echo "🌐 URL: https://finance.saranagemilang.co.id"
echo "🔄 Rollback: ./rollback.sh"
echo "════════════════════════════════════════════════════════════"