#!/bin/bash
set -e

# ============================================================
# Samir Portal - Deployment Script
# Usage: ./deploy.sh
# ============================================================

# --- Configuration ---
SERVER_USER="samirsolutions"
SERVER_HOST="portal.samirsolutions.com"
SERVER_PATH="/var/www/portal.samirsolutions.com"
SSH_KEY="$HOME/.ssh/id_rsa_samir"  # Update to your SSH key path
LOCAL_PATH="$(cd "$(dirname "$0")" && pwd)"

# --- Colors ---
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

info()  { echo -e "${GREEN}[DEPLOY]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }

# --- Pre-flight checks ---
info "Starting deployment to ${SERVER_HOST}..."

if [ ! -f "$SSH_KEY" ]; then
    warn "SSH key not found at $SSH_KEY"
    echo "Enter your SSH key path:"
    read -r SSH_KEY
    [ ! -f "$SSH_KEY" ] && error "SSH key not found: $SSH_KEY"
fi

SSH_CMD="ssh -i $SSH_KEY ${SERVER_USER}@${SERVER_HOST}"

# --- Step 1: Build frontend assets locally ---
info "Building frontend assets..."
cd "$LOCAL_PATH"
npm run build

# --- Step 2: Upload files via rsync ---
info "Uploading files to server..."
rsync -avz --progress \
    --exclude='.git' \
    --exclude='node_modules' \
    --exclude='.env' \
    --exclude='storage/logs/*' \
    --exclude='storage/framework/cache/*' \
    --exclude='storage/framework/sessions/*' \
    --exclude='storage/framework/views/*' \
    --exclude='vendor' \
    --exclude='deploy.sh' \
    --exclude='.DS_Store' \
    -e "ssh -i $SSH_KEY" \
    "$LOCAL_PATH/" "${SERVER_USER}@${SERVER_HOST}:${SERVER_PATH}/"

# --- Step 3: Run server-side commands ---
info "Running server-side setup..."
$SSH_CMD << 'REMOTE_COMMANDS'
set -e
cd /var/www/portal.samirsolutions.com

echo ">>> Installing Composer dependencies..."
composer install --no-dev --optimize-autoloader --no-interaction

echo ">>> Setting up .env file..."
if [ ! -f .env ]; then
    cp .env.example .env
    php artisan key:generate
    echo ">>> IMPORTANT: Edit .env with your production database credentials!"
    echo ">>>   nano /var/www/portal.samirsolutions.com/.env"
fi

echo ">>> Setting directory permissions..."
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache 2>/dev/null || true

echo ">>> Creating storage link..."
php artisan storage:link 2>/dev/null || true

echo ">>> Running migrations..."
php artisan migrate --force

echo ">>> Clearing and caching..."
php artisan config:cache
php artisan route:cache
php artisan view:cache

echo ">>> Done on server!"
REMOTE_COMMANDS

# --- Done ---
echo ""
info "============================================"
info "  Deployment complete!"
info "============================================"
echo ""
warn "FIRST-TIME SETUP - You still need to:"
echo "  1. SSH in and edit .env with production DB credentials:"
echo "     ssh -i $SSH_KEY ${SERVER_USER}@${SERVER_HOST}"
echo "     nano ${SERVER_PATH}/.env"
echo ""
echo "  2. Run database seeder (if needed):"
echo "     php artisan db:seed"
echo ""
echo "  3. Ensure Apache vhost points to:"
echo "     ${SERVER_PATH}/public"
echo ""
