#!/bin/bash
set -e

echo "=============================================="
echo "  cPanel Webmail - Automated Installation"
echo "=============================================="
echo ""

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

# Check PHP
if ! command -v php &> /dev/null; then
    echo -e "${RED}PHP is not installed. Please install PHP 8.2+ first.${NC}"
    exit 1
fi

PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
REQUIRED="8.2"
if [[ "$(printf '%s\n' "$REQUIRED" "$PHP_VERSION" | sort -V | head -n1)" != "$REQUIRED" ]]; then
    echo -e "${RED}PHP $PHP_VERSION detected. PHP 8.2 or higher is required.${NC}"
    exit 1
fi
echo -e "${GREEN}✓ PHP $PHP_VERSION found${NC}"

# Check Composer
if ! command -v composer &> /dev/null; then
    echo -e "${RED}Composer is not installed. Installing...${NC}"
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
fi
echo -e "${GREEN}✓ Composer found${NC}"

# Check Node (optional)
HAS_NODE=false
if command -v node &> /dev/null && command -v npm &> /dev/null; then
    HAS_NODE=true
    echo -e "${GREEN}✓ Node.js found${NC}"
else
    echo -e "${YELLOW}! Node.js not found (optional - assets will use CDN)${NC}"
fi

echo ""
echo "Please provide the following configuration:"
echo "------------------------------------------"

read -p "cPanel Server Domain/IP (e.g. server.example.com): " CPANEL_HOST
read -p "cPanel Username: " CPANEL_USER
read -sp "cPanel API Token: " CPANEL_TOKEN
echo ""
read -p "Email Domain (e.g. example.com): " EMAIL_DOMAIN
read -p "Database Host [127.0.0.1]: " DB_HOST
DB_HOST=${DB_HOST:-127.0.0.1}
read -p "Database Name: " DB_DATABASE
read -p "Database Username: " DB_USERNAME
read -sp "Database Password: " DB_PASSWORD
echo ""
read -p "Application URL (e.g. https://webmail.example.com): " APP_URL
read -p "Admin Email [admin@${EMAIL_DOMAIN}]: " ADMIN_EMAIL
ADMIN_EMAIL=${ADMIN_EMAIL:-admin@${EMAIL_DOMAIN}}

# Generate random password for admin
ADMIN_PASSWORD=$(openssl rand -base64 12 | tr -d '/=+')

echo ""
echo "Generating .env file..."

cat > .env <<EOF
APP_NAME="cPanel Webmail"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=${APP_URL}
APP_TIMEZONE=UTC

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=info

DB_CONNECTION=mysql
DB_HOST=${DB_HOST}
DB_PORT=3306
DB_DATABASE=${DB_DATABASE}
DB_USERNAME=${DB_USERNAME}
DB_PASSWORD=${DB_PASSWORD}

SESSION_DRIVER=database
SESSION_LIFETIME=30
SESSION_ENCRYPT=true
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database

CACHE_STORE=file
CACHE_PREFIX=

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@${EMAIL_DOMAIN}"
MAIL_FROM_NAME="\${APP_NAME}"

# cPanel Configuration
CPANEL_HOST=${CPANEL_HOST}
CPANEL_PORT=2083
CPANEL_USERNAME=${CPANEL_USER}
CPANEL_TOKEN=${CPANEL_TOKEN}
CPANEL_SSL=true
EMAIL_DOMAIN=${EMAIL_DOMAIN}

# IMAP / SMTP defaults (can be overridden per account)
IMAP_HOST=${CPANEL_HOST}
IMAP_PORT=993
IMAP_ENCRYPTION=ssl
SMTP_HOST=${CPANEL_HOST}
SMTP_PORT=465
SMTP_ENCRYPTION=ssl

SANCTUM_STATEFUL_DOMAINS=
EOF

echo -e "${GREEN}✓ .env created${NC}"

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

echo ""
echo "Generating application key..."
php artisan key:generate --force

echo ""
echo "Running migrations and seeders..."
php artisan migrate --force
php artisan db:seed --force

echo ""
echo "Creating storage link..."
php artisan storage:link || true

echo ""
echo "Caching configuration..."
php artisan config:cache
php artisan route:cache
php artisan view:cache

if [ "$HAS_NODE" = true ]; then
    echo ""
    echo "Building frontend assets..."
    npm install --silent
    npm run build
fi

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

echo ""
echo "=============================================="
echo -e "${GREEN}Installation completed successfully!${NC}"
echo "=============================================="
echo ""
echo "Admin credentials:"
echo "  Email   : ${ADMIN_EMAIL}"
echo "  Password: ${ADMIN_PASSWORD}"
echo ""
echo "IMPORTANT: Change the admin password after first login!"
echo ""
echo "Next steps:"
echo "1. Point your web server document root to the 'public' folder"
echo "2. Configure SSL (AutoSSL or Let's Encrypt recommended)"
echo "3. Add this cron job (runs every minute):"
echo "   * * * * * cd $(pwd) && php artisan schedule:run >> /dev/null 2>&1"
echo "4. Ensure firewall allows ports 993 (IMAP), 465/587 (SMTP), 2083 (cPanel)"
echo ""
echo "Security headers are already set in public/.htaccess"
echo "=============================================="
