#!/bin/bash
set -e

# ============================================================
# Configuration
# ============================================================
APP_DIR="/var/www/html/dadycar-admin"
PM2_NAME="nextjs-dadycar-admin"
NODE_VERSION="20"

# Git configuration
GIT_REPO="github.com/mbourssia/dadycar-admin-next.git"
GIT_BRANCH="main"
GIT_TOKEN="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"
GIT_USERNAME="mbourssia"

BACKUP_DIR="/home/dadycar_backend/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_NAME="dadycar-admin_backup_${TIMESTAMP}"

GIT_REPO_WITH_TOKEN="https://${GIT_USERNAME}:${GIT_TOKEN}@${GIT_REPO}"

echo "🚀 Starting deployment process..."

# ============================================================
# Backup
# ============================================================
mkdir -p "${BACKUP_DIR}"

if [ "$(ls -A ${APP_DIR} 2>/dev/null)" ]; then
    echo "💾 Creating backup..."
    tar -czf "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" -C "${APP_DIR}" .
    if [ $? -ne 0 ]; then
        echo "❌ Backup failed! Aborting."
        exit 1
    fi
    echo "✅ Backup: ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
fi

# Keep last 5 backups
ls -t "${BACKUP_DIR}"/dadycar-admin_backup_*.tar.gz 2>/dev/null | tail -n +6 | xargs -r rm

# ============================================================
# Clone
# ============================================================
echo "📥 Cloning repository..."
rm -rf /tmp/dadycar_admin_temp_clone
git clone -b ${GIT_BRANCH} ${GIT_REPO_WITH_TOKEN} /tmp/dadycar_admin_temp_clone

# Stop PM2 before replacing files
pm2 delete "${PM2_NAME}" 2>/dev/null || true

# Replace app directory
rm -rf "${APP_DIR}"
mkdir -p "${APP_DIR}"
mv /tmp/dadycar_admin_temp_clone/* "${APP_DIR}/"
mv /tmp/dadycar_admin_temp_clone/.* "${APP_DIR}/" 2>/dev/null || true
rm -rf /tmp/dadycar_admin_temp_clone

cd "${APP_DIR}"

# ============================================================
# Install & Build
# ============================================================
echo "📦 Installing dependencies..."
npm install --legacy-peer-deps

# Environment
cp .prod.env .env 2>/dev/null || true

echo "🛠 Building Next.js application..."
npm run build

# ============================================================
# Setup standalone output
# ============================================================
echo "📁 Setting up standalone..."
cp -r public .next/standalone/public
cp -r .next/static .next/standalone/.next/static

# ============================================================
# PM2 ecosystem config
# ============================================================
echo "📝 Creating PM2 ecosystem config..."
cat > "${APP_DIR}/ecosystem.config.js" << EOL
module.exports = {
  apps: [{
    name: '${PM2_NAME}',
    script: './.next/standalone/server.js',
    cwd: '${APP_DIR}',
    env: {
      PORT: 3002,
      NODE_ENV: 'production',
      HOSTNAME: 'localhost'
    },
    instances: 1,
    exec_mode: 'fork',
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    time: true
  }]
}
EOL

# ============================================================
# Start PM2
# ============================================================
echo "🚦 Starting PM2 process..."
cd "${APP_DIR}"
pm2 start ecosystem.config.js
pm2 save --force

# Wait and verify
echo "⏳ Waiting for application to start..."
sleep 5

curl -s -o /dev/null -w "%{http_code}" http://localhost:3002/admin | grep -q "200\|301\|302" \
    && echo "✅ Application is running on /admin!" \
    || echo "⚠️ Application may still be starting. Check: pm2 logs ${PM2_NAME}"

pm2 status

echo "
✨ Deployment completed! ✨

App URL:     https://fleetdev.dadycar.fr/admin
PM2 status:  pm2 status
PM2 logs:    pm2 logs ${PM2_NAME}
"
