#!/bin/bash

# =====================================================
# DATABASE CONFIGURATION
# =====================================================

DB_NAME="wordpress_db"
DB_USER="wpuser"
DB_PASS="StrongPassword123!"

# =====================================================
# PHP CONFIGURATION
# =====================================================

PHP_UPLOAD_MAX_FILESIZE="256M"
PHP_POST_MAX_SIZE="256M"
PHP_MEMORY_LIMIT="512M"
PHP_MAX_EXECUTION_TIME="300"
PHP_MAX_INPUT_TIME="300"


# =====================================================
# Automated LAMP + WordPress + phpMyAdmin Setup
# Ubuntu / Debian
# =====================================================

set -e

echo "Updating system..."
apt update -y

echo "Installing Apache..."
apt install apache2 -y

echo "Installing MariaDB..."
apt install mariadb-server -y

echo "Installing PHP and extensions..."
apt install php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl -y

echo "Restarting Apache..."
systemctl restart apache2

# -----------------------------------------------------
# Secure MariaDB (basic auto secure)
# -----------------------------------------------------

echo "Securing MariaDB..."

mysql -e "DELETE FROM mysql.user WHERE User='';"
mysql -e "DROP DATABASE IF EXISTS test;"
mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"
mysql -e "FLUSH PRIVILEGES;"

# -----------------------------------------------------
# Create WordPress Database
# -----------------------------------------------------

echo "Creating WordPress database..."

mysql -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME};"
mysql -e "CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';"
mysql -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"

# -----------------------------------------------------
# Download WordPress
# -----------------------------------------------------

echo "Downloading WordPress..."

cd /var/www/html

rm -rf wordpress
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
rm latest.tar.gz

# Set permissions
chown -R www-data:www-data wordpress
find wordpress -type d -exec chmod 755 {} \;
find wordpress -type f -exec chmod 644 {} \;

# -----------------------------------------------------
# Configure wp-config.php
# -----------------------------------------------------

echo "Configuring WordPress..."

cd wordpress
cp wp-config-sample.php wp-config.php

sed -i "s/database_name_here/${DB_NAME}/" wp-config.php
sed -i "s/username_here/${DB_USER}/" wp-config.php
sed -i "s/password_here/${DB_PASS}/" wp-config.php

# Add memory limit
echo "define('WP_MEMORY_LIMIT', '512M');" >> wp-config.php

# -----------------------------------------------------
# Increase PHP upload limits
# -----------------------------------------------------

PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
PHP_INI="/etc/php/${PHP_VERSION}/apache2/php.ini"

echo "Updating PHP configuration..."

sed -i "s/upload_max_filesize = .*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" $PHP_INI
sed -i "s/post_max_size = .*/post_max_size = ${PHP_POST_MAX_SIZE}/" $PHP_INI
sed -i "s/memory_limit = .*/memory_limit = ${PHP_MEMORY_LIMIT}/" $PHP_INI
sed -i "s/max_execution_time = .*/max_execution_time = ${PHP_MAX_EXECUTION_TIME}/" $PHP_INI
sed -i "s/max_input_time = .*/max_input_time = ${PHP_MAX_INPUT_TIME}/" $PHP_INI


# -----------------------------------------------------
# Enable mod_rewrite
# -----------------------------------------------------

a2enmod rewrite

sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf

# Disable directory browsing
sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/' /etc/apache2/apache2.conf

# Remove default Apache page
rm -f /var/www/html/index.html

# -----------------------------------------------------
# Install phpMyAdmin
# -----------------------------------------------------

echo "Installing phpMyAdmin..."

DEBIAN_FRONTEND=noninteractive apt install phpmyadmin -y || true

if [ ! -f /etc/apache2/conf-available/phpmyadmin.conf ]; then
ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
fi

#
# if linking configration doesn't work then create it manually
#
if [ ! -f /etc/apache2/conf-available/phpmyadmin.conf ]; then
cat <<EOF > /etc/apache2/conf-available/phpmyadmin.conf
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    Require all granted
</Directory>

<Directory /usr/share/phpmyadmin/setup>
    Require all denied
</Directory>
EOF
fi


a2enconf phpmyadmin || true

# -----------------------------------------------------
# Restart Services
# -----------------------------------------------------

systemctl restart apache2
systemctl restart mariadb

# -----------------------------------------------------
# Done
# -----------------------------------------------------

SERVER_IP=$(hostname -I | awk '{print $1}')

echo "====================================================="
echo "✅ Installation Complete!"
echo ""
echo "WordPress URL:"
echo "http://${SERVER_IP}/wordpress"
echo ""
echo "phpMyAdmin URL:"
echo "http://${SERVER_IP}/phpmyadmin"
echo ""
echo "Database Info:"
echo "Database: ${DB_NAME}"
echo "User: ${DB_USER}"
echo "Password: ${DB_PASS}"
echo "====================================================="
