
#!/bin/bash

echo "🔍 Detectando recursos del servidor..."

CPU_CORES=$(nproc)
TOTAL_RAM_MB=$(free -m | awk '/^Mem:/{print $2}')

echo "🧠 CPUs detectados: $CPU_CORES"
echo "🧠 RAM total: ${TOTAL_RAM_MB}MB"

read -p "¿Este servidor es solo para (1) Web, (2) API, o (3) Ambos? [1/2/3]: " server_type

case "$server_type" in
    1) TYPE="web";;
    2) TYPE="api";;
    3) TYPE="mixto";;
    *) echo "❗ Opción inválida. Saliendo..."; exit 1;;
esac

case "$TYPE" in
    web)
        PM_MAX_CHILDREN=$(( TOTAL_RAM_MB / 60 ))
        PHP_MEMORY_LIMIT="512M"
        ;;
    api)
        PM_MAX_CHILDREN=$(( TOTAL_RAM_MB / 40 ))
        PHP_MEMORY_LIMIT="1024M"
        ;;
    mixto)
        PM_MAX_CHILDREN=$(( TOTAL_RAM_MB / 50 ))
        PHP_MEMORY_LIMIT="1024M"
        ;;
esac

if [ $TOTAL_RAM_MB -ge 16384 ]; then
    PHP_MEMORY_LIMIT="2048M"
fi

echo "🔧 Configuraciones sugeridas:"
echo " - Tipo de servidor: $TYPE"
echo " - pm.max_children = $PM_MAX_CHILDREN"
echo " - PHP memory_limit = $PHP_MEMORY_LIMIT"

read -p "¿Aplicar estas configuraciones automáticamente? (s/n): " confirm

if [[ "$confirm" == "s" ]]; then

    echo "✅ Aplicando ajustes de PHP-FPM..."

    PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
    PHP_FPM_WWW="/etc/php/${PHP_VERSION}/fpm/pool.d/www.conf"

    sudo sed -i "s/^pm.max_children\s*=.*/pm.max_children = $PM_MAX_CHILDREN/" $PHP_FPM_WWW
    sudo sed -i "s/^pm.start_servers\s*=.*/pm.start_servers = 10/" $PHP_FPM_WWW
    sudo sed -i "s/^pm.min_spare_servers\s*=.*/pm.min_spare_servers = 5/" $PHP_FPM_WWW
    sudo sed -i "s/^pm.max_spare_servers\s*=.*/pm.max_spare_servers = 15/" $PHP_FPM_WWW
    sudo sed -i "s/^pm.max_requests\s*=.*/pm.max_requests = 1000/" $PHP_FPM_WWW

    echo "✅ Aplicando ajustes de php.ini..."

    PHP_INI="/etc/php/${PHP_VERSION}/fpm/php.ini"
    sudo sed -i "s/^memory_limit\s*=.*/memory_limit = $PHP_MEMORY_LIMIT/" $PHP_INI
    sudo sed -i "s/^upload_max_filesize\s*=.*/upload_max_filesize = 100M/" $PHP_INI
    sudo sed -i "s/^post_max_size\s*=.*/post_max_size = 100M/" $PHP_INI

    echo "✅ Ajustando Nginx..."

    NGINX_CONF="/etc/nginx/nginx.conf"
    sudo sed -i "s/worker_processes\s\+auto;/worker_processes $CPU_CORES;/" $NGINX_CONF
    sudo sed -i "s/worker_connections\s\+[0-9]\+/worker_connections 65535/" $NGINX_CONF

    if [[ "$TYPE" == "api" || "$TYPE" == "mixto" ]]; then
        sudo tee -a $NGINX_CONF > /dev/null <<EOF

# Ajustes extra para APIs
proxy_buffering off;
proxy_request_buffering off;
EOF
    fi

    echo "✅ Ajustando kernel..."

    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF

# Ajustes de red para alta concurrencia
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_fin_timeout = 15
EOF

    sudo sysctl -p

    echo "♻️ Reiniciando servicios..."
    sudo systemctl restart php${PHP_VERSION}-fpm
    sudo systemctl restart nginx

    echo "✅ Optimización completada en Ubuntu 22.04"
else
    echo "❌ Configuración cancelada."
fi
