#!/bin/bash

###############################################################################
# WiFi Guardian Backend - Auto Installation Script
# للتثبيت التلقائي على Ubuntu 22.04 Server
###############################################################################

set -e  # Exit on any error

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

# Check if running as root
if [[ $EUID -eq 0 ]]; then
   print_error "لا تشغل هذا السكريبت كـ root. استخدم sudo عند الحاجة."
   exit 1
fi

print_info "🚀 بدء تثبيت WiFi Guardian Backend..."
echo ""

# Get configuration from user
read -p "أدخل الدومين أو IP الخاص بك (مثال: api.yourdomain.com أو 192.168.1.100): " DOMAIN
read -p "أدخل كلمة مرور قاعدة البيانات (اتركه فارغاً لتوليد تلقائي): " DB_PASSWORD

# Generate random password if empty
if [ -z "$DB_PASSWORD" ]; then
    DB_PASSWORD=$(openssl rand -base64 16)
    print_info "تم توليد كلمة مرور: $DB_PASSWORD"
fi

DB_USER="wifi_guardian_user"
DB_NAME="wifi_guardian"

echo ""
print_info "📋 معلومات التثبيت:"
echo "  الدومين/IP: $DOMAIN"
echo "  قاعدة البيانات: $DB_NAME"
echo "  المستخدم: $DB_USER"
echo "  كلمة المرور: $DB_PASSWORD"
echo ""

read -p "هل تريد المتابعة؟ (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    exit 1
fi

###############################################################################
# Step 1: Update System
###############################################################################
print_info "1️⃣  تحديث النظام..."
sudo apt update
sudo apt upgrade -y
print_success "تم تحديث النظام"

###############################################################################
# Step 2: Install PHP 8.2
###############################################################################
print_info "2️⃣  تثبيت PHP 8.2..."
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y \
    php8.2 \
    php8.2-fpm \
    php8.2-cli \
    php8.2-common \
    php8.2-mysql \
    php8.2-zip \
    php8.2-gd \
    php8.2-mbstring \
    php8.2-curl \
    php8.2-xml \
    php8.2-bcmath \
    php8.2-sqlite3

print_success "تم تثبيت PHP 8.2"

###############################################################################
# Step 3: Install Composer
###############################################################################
print_info "3️⃣  تثبيت Composer..."
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php
print_success "تم تثبيت Composer"

###############################################################################
# Step 4: Install MySQL
###############################################################################
print_info "4️⃣  تثبيت MySQL..."
sudo apt install -y mysql-server
print_success "تم تثبيت MySQL"

###############################################################################
# Step 5: Install Nginx
###############################################################################
print_info "5️⃣  تثبيت Nginx..."
sudo apt install -y nginx
print_success "تم تثبيت Nginx"

###############################################################################
# Step 6: Install Git
###############################################################################
print_info "6️⃣  تثبيت Git..."
sudo apt install -y git
print_success "تم تثبيت Git"

###############################################################################
# Step 7: Configure MySQL
###############################################################################
print_info "7️⃣  إعداد قاعدة البيانات..."

sudo mysql <<MYSQL_SCRIPT
CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
FLUSH PRIVILEGES;
MYSQL_SCRIPT

print_success "تم إعداد قاعدة البيانات"

###############################################################################
# Step 8: Clone Repository
###############################################################################
print_info "8️⃣  استنساخ المشروع..."
cd /var/www
sudo git clone https://github.com/ahmed114745ed-bot/wifi-guardian-backend.git

print_success "تم استنساخ المشروع"

###############################################################################
# Step 9: Set Permissions
###############################################################################
print_info "9️⃣  تعيين الصلاحيات..."
sudo chown -R www-data:www-data /var/www/wifi-guardian-backend
sudo chmod -R 755 /var/www/wifi-guardian-backend
sudo chmod -R 775 /var/www/wifi-guardian-backend/storage
sudo chmod -R 775 /var/www/wifi-guardian-backend/bootstrap/cache

print_success "تم تعيين الصلاحيات"

###############################################################################
# Step 10: Install Dependencies
###############################################################################
print_info "🔟 تثبيت Dependencies..."
cd /var/www/wifi-guardian-backend
sudo -u www-data composer install --no-dev --optimize-autoloader

print_success "تم تثبيت Dependencies"

###############################################################################
# Step 11: Configure Environment
###############################################################################
print_info "1️⃣1️⃣  إعداد ملف البيئة..."
sudo -u www-data cp .env.example .env

# Update .env file
sudo -u www-data sed -i "s|APP_ENV=.*|APP_ENV=production|" .env
sudo -u www-data sed -i "s|APP_DEBUG=.*|APP_DEBUG=false|" .env
sudo -u www-data sed -i "s|APP_URL=.*|APP_URL=http://${DOMAIN}|" .env
sudo -u www-data sed -i "s|DB_CONNECTION=.*|DB_CONNECTION=mysql|" .env
sudo -u www-data sed -i "s|DB_DATABASE=.*|DB_DATABASE=${DB_NAME}|" .env
sudo -u www-data sed -i "s|DB_USERNAME=.*|DB_USERNAME=${DB_USER}|" .env
sudo -u www-data sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=${DB_PASSWORD}|" .env

print_success "تم إعداد ملف البيئة"

###############################################################################
# Step 12: Laravel Setup
###############################################################################
print_info "1️⃣2️⃣  إعداد Laravel..."
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan migrate --force
sudo -u www-data php artisan config:cache
sudo -u www-data php artisan route:cache
sudo -u www-data php artisan view:cache

print_success "تم إعداد Laravel"

###############################################################################
# Step 13: Configure Nginx
###############################################################################
print_info "1️⃣3️⃣  إعداد Nginx..."

sudo tee /etc/nginx/sites-available/wifi-guardian-backend > /dev/null <<EOF
server {
    listen 80;
    listen [::]:80;
    server_name ${DOMAIN};
    root /var/www/wifi-guardian-backend/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files \$uri \$uri/ /index.php?\$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    # CORS Headers for Flutter
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With' always;
}
EOF

# Enable site
sudo ln -sf /etc/nginx/sites-available/wifi-guardian-backend /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default

# Test and restart Nginx
sudo nginx -t
sudo systemctl restart nginx

print_success "تم إعداد Nginx"

###############################################################################
# Step 14: Configure Firewall
###############################################################################
print_info "1️⃣4️⃣  إعداد Firewall..."
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw --force enable

print_success "تم إعداد Firewall"

###############################################################################
# Step 15: Setup Cron Jobs
###############################################################################
print_info "1️⃣5️⃣  إعداد Cron Jobs..."

# Add cron job for www-data user
(sudo crontab -u www-data -l 2>/dev/null; echo "* * * * * cd /var/www/wifi-guardian-backend && php artisan schedule:run >> /dev/null 2>&1") | sudo crontab -u www-data -

print_success "تم إعداد Cron Jobs"

###############################################################################
# Step 16: Create Queue Worker Service
###############################################################################
print_info "1️⃣6️⃣  إعداد Queue Worker..."

sudo tee /etc/systemd/system/wifi-guardian-worker.service > /dev/null <<EOF
[Unit]
Description=WiFi Guardian Queue Worker
After=network.target

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/wifi-guardian-backend/artisan queue:work --sleep=3 --tries=3 --max-time=3600

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable wifi-guardian-worker
sudo systemctl start wifi-guardian-worker

print_success "تم إعداد Queue Worker"

###############################################################################
# Final Steps
###############################################################################
echo ""
echo "=========================================="
print_success "🎉 التثبيت اكتمل بنجاح!"
echo "=========================================="
echo ""

# Get server IP
SERVER_IP=$(curl -s ifconfig.me)

echo "📡 معلومات الوصول:"
echo "   API URL: http://${DOMAIN}/api"
if [ "$DOMAIN" != "$SERVER_IP" ]; then
    echo "   Server IP: http://${SERVER_IP}/api"
fi
echo ""

echo "🗄️  معلومات قاعدة البيانات:"
echo "   Database: ${DB_NAME}"
echo "   Username: ${DB_USER}"
echo "   Password: ${DB_PASSWORD}"
echo ""

echo "📂 مسار المشروع:"
echo "   /var/www/wifi-guardian-backend"
echo ""

echo "📊 أوامر مفيدة:"
echo "   - مراقبة Logs: sudo tail -f /var/www/wifi-guardian-backend/storage/logs/laravel.log"
echo "   - إعادة تشغيل Nginx: sudo systemctl restart nginx"
echo "   - إعادة تشغيل Worker: sudo systemctl restart wifi-guardian-worker"
echo "   - تحديث المشروع: cd /var/www/wifi-guardian-backend && sudo git pull"
echo ""

print_warning "⚠️  الخطوات التالية:"
echo "   1. قم بتحديث baseUrl في Flutter App إلى: http://${DOMAIN}/api"
echo "   2. اختبر API: curl http://${DOMAIN}/api/auth/register"
echo "   3. (اختياري) قم بتثبيت SSL: sudo certbot --nginx -d ${DOMAIN}"
echo ""

# Save credentials to file
CREDS_FILE="/root/wifi-guardian-credentials.txt"
sudo tee $CREDS_FILE > /dev/null <<EOF
WiFi Guardian Backend Credentials
==================================
Database Name: ${DB_NAME}
Database User: ${DB_USER}
Database Password: ${DB_PASSWORD}
API URL: http://${DOMAIN}/api
Server IP: ${SERVER_IP}
Installation Date: $(date)
EOF

print_success "تم حفظ المعلومات في: $CREDS_FILE"
echo ""
print_success "✨ استمتع بـ WiFi Guardian!"
