#!/bin/bash

################################################################################
# Deployment Script for cPanel Shared Hosting
#
# IMPORTANT: Upload this file to /home/YOUR_USERNAME/deploy.sh on your server
# Make it executable: chmod +x /home/YOUR_USERNAME/deploy.sh
#
# UPDATE THE VARIABLES BELOW WITH YOUR ACTUAL VALUES
################################################################################

# Configuration - UPDATE THESE VALUES
DEPLOY_USER="sadiqsof"  # Replace with your cPanel username
DEPLOY_PATH="/home/$DEPLOY_USER/bostone-business-os"
DEPLOYMENT_PACKAGE="/home/$DEPLOY_USER/deployment/deployment.tar.gz"
BACKUP_PATH="/home/$DEPLOY_USER/backups"
DATE=$(date +%Y%m%d_%H%M%S)

echo "===== Starting Deployment at $DATE ====="

# Create backup directory if it doesn't exist
mkdir -p $BACKUP_PATH
mkdir -p /home/$DEPLOY_USER/deployment

# Create backup of current version
echo "Creating backup..."
if [ -d "$DEPLOY_PATH" ]; then
    tar -czf $BACKUP_PATH/backup_$DATE.tar.gz -C $DEPLOY_PATH .
    echo "Backup created: backup_$DATE.tar.gz"
else
    echo "WARNING: Deploy path does not exist. Skipping backup."
fi

# Enable maintenance mode
echo "Enabling maintenance mode..."
cd $DEPLOY_PATH
php artisan down --retry=60 --secret="deployment-token" || true

# Wait for deployment package to be uploaded
echo "Waiting for deployment package..."
TIMEOUT=60
ELAPSED=0
while [ ! -f "$DEPLOYMENT_PACKAGE" ] && [ $ELAPSED -lt $TIMEOUT ]; do
    sleep 1
    ELAPSED=$((ELAPSED + 1))
done

if [ ! -f "$DEPLOYMENT_PACKAGE" ]; then
    echo "ERROR: Deployment package not found after ${TIMEOUT}s"
    php artisan up
    exit 1
fi

# Extract new version
echo "Extracting new version..."
tar -xzf $DEPLOYMENT_PACKAGE -C $DEPLOY_PATH

# Set proper permissions
echo "Setting permissions..."
chmod -R 755 $DEPLOY_PATH/storage
chmod -R 755 $DEPLOY_PATH/bootstrap/cache
find $DEPLOY_PATH/storage -type f -exec chmod 644 {} \;
find $DEPLOY_PATH/bootstrap/cache -type f -exec chmod 644 {} \;

# Install/Update dependencies (production only)
echo "Installing dependencies..."
cd $DEPLOY_PATH
composer install --no-dev --optimize-autoloader --no-interaction

# Run database migrations
echo "Running database migrations..."
php artisan migrate --force

# Clear all caches
echo "Clearing caches..."
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

# Optimize application
echo "Optimizing application..."
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize

# Clear compiled views and config
php artisan event:cache || true
php artisan queue:restart || true

# Disable maintenance mode
echo "Disabling maintenance mode..."
php artisan up

echo "===== Deployment completed successfully! ====="
echo "Deployed at: $(date)"
echo "Backup location: $BACKUP_PATH/backup_$DATE.tar.gz"

# Cleanup deployment package
rm -f $DEPLOYMENT_PACKAGE

# Cleanup old backups (keep last 5)
echo "Cleaning up old backups (keeping last 5)..."
cd $BACKUP_PATH
ls -t backup_*.tar.gz 2>/dev/null | tail -n +6 | xargs rm -f 2>/dev/null || true

echo "===== Deployment process finished ====="

