#!/bin/bash

# CodeXzone Deployment Script
# Run: chmod +x deploy.sh && ./deploy.sh

echo "════════════════════════════════════════"
echo "   CodeXzone Deployment Script"
echo "════════════════════════════════════════"
echo ""

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

# Check if running as root
if [[ $EUID -eq 0 ]]; then
   echo -e "${RED}Error: Do not run as root${NC}"
   exit 1
fi

# Configuration
PROJECT_DIR="/var/www/codexzone"
DOMAIN="codexzone.com.bd"
DB_NAME="codexzone_db"
DB_USER="codexzone_user"
DB_PASS=$(openssl rand -base64 32)

echo -e "${YELLOW}Step 1: Updating System...${NC}"
sudo apt update && sudo apt upgrade -y

echo -e "${YELLOW}Step 2: Installing Required Packages...${NC}"
sudo apt install -y nginx mysql-server php8.1 php8.1-fpm php8.1-mysql \
    php8.1-common php8.1-cli php8.1-curl php8.1-gd php8.1-mbstring \
    php8.1-xml php8.1-zip php8.1-intl php8.1-bcmath redis-server \
    certbot python3-certbot-nginx git unzip

echo -e "${YELLOW}Step 3: Creating Project Directory...${NC}"
sudo mkdir -p $PROJECT_DIR
sudo chown -R $USER:$USER $PROJECT_DIR

echo -e "${YELLOW}Step 4: Cloning Repository...${NC}"
cd $PROJECT_DIR
git clone https://github.com/codexzone/marketplace.git .

echo -e "${YELLOW}Step 5: Installing Composer Dependencies...${NC}"
composer install --no-dev --optimize-autoloader

echo -e "${YELLOW}Step 6: Setting Up Database...${NC}"
sudo mysql -e "CREATE DATABASE IF NOT EXISTS $DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
sudo mysql -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"

# Import database schema
mysql -u $DB_USER -p$DB_PASS $DB_NAME < database/schema.sql

echo -e "${YELLOW}Step 7: Configuring Environment...${NC}"
cp config/config.example.php config/config.php

# Update config with database credentials
sed -i "s/'DB_HOST', 'localhost'/'DB_HOST', 'localhost'/" config/config.php
sed -i "s/'DB_NAME', 'codexzone_db'/'DB_NAME', '$DB_NAME'/" config/config.php
sed -i "s/'DB_USER', 'root'/'DB_USER', '$DB_USER'/" config/config.php
sed -i "s/'DB_PASS', ''/'DB_PASS', '$DB_PASS'/" config/config.php
sed -i "s|'SITE_URL', 'https://codexzone.com.bd/'|'SITE_URL', 'https://$DOMAIN/'|" config/config.php

# Generate secure keys
SECRET_KEY=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
sed -i "s/bin2hex(random_bytes(32))/'$SECRET_KEY'/" config/config.php
sed -i "s/'your-256-bit-encryption-key-here'/'$ENCRYPTION_KEY'/" config/config.php

echo -e "${YELLOW}Step 8: Setting Permissions...${NC}"
chmod -R 755 storage/
chmod -R 755 public/uploads/
chmod 750 config/config.php

echo -e "${YELLOW}Step 9: Configuring Nginx...${NC}"
sudo tee /etc/nginx/sites-available/$DOMAIN > /dev/null <<EOF
server {
    listen 80;
    server_name $DOMAIN www.$DOMAIN;
    root $PROJECT_DIR/public;
    index index.php;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location ~ /storage {
        deny all;
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx

echo -e "${YELLOW}Step 10: Setting Up SSL Certificate...${NC}"
sudo certbot --nginx -d $DOMAIN -d www.$DOMAIN --non-interactive --agree-tos --email admin@$DOMAIN

echo -e "${YELLOW}Step 11: Setting Up Cron Jobs...${NC}"
(crontab -l 2>/dev/null; echo "* * * * * php $PROJECT_DIR/cron/process_orders.php") | crontab -
(crontab -l 2>/dev/null; echo "0 * * * * php $PROJECT_DIR/cron/expire_licenses.php") | crontab -
(crontab -l 2>/dev/null; echo "0 0 * * * php $PROJECT_DIR/cron/generate_reports.php") | crontab -

echo -e "${YELLOW}Step 12: Creating Admin User...${NC}"
read -p "Enter admin email: " ADMIN_EMAIL
read -sp "Enter admin password: " ADMIN_PASS
echo ""

HASHED_PASS=$(php -r "echo password_hash('$ADMIN_PASS', PASSWORD_BCRYPT);")
mysql -u $DB_USER -p$DB_PASS $DB_NAME -e "UPDATE users SET email='$ADMIN_EMAIL', password='$HASHED_PASS', role='admin', email_verified=1 WHERE id=1;"

echo -e "${GREEN}════════════════════════════════════════${NC}"
echo -e "${GREEN}   Deployment Complete!${NC}"
echo -e "${GREEN}════════════════════════════════════════${NC}"
echo ""
echo "Website: https://$DOMAIN"
echo "Admin Panel: https://$DOMAIN/admin"
echo "Admin Email: $ADMIN_EMAIL"
echo ""
echo -e "${YELLOW}Database Credentials (Save securely):${NC}"
echo "Database: $DB_NAME"
echo "Username: $DB_USER"
echo "Password: $DB_PASS"
echo ""
echo -e "${RED}IMPORTANT: Delete deploy.sh after successful deployment!${NC}"