#!/bin/bash

# Cargar variables de entorno desde el archivo .env
set -a
source /var/www/html/wordpress-manager-v2/.env
set +a

# Archivo de log
LOG_FILE="/var/www/html/wordpress-manager-v2/logs/wordpress_deploy.log"
exec > >(tee -a ${LOG_FILE} ) 2>&1
set -e

echo "Iniciando despliegue del sitio..."

# Parámetros
project="$1"
domain="$2"
mysqldb="$3"
ssl="$4"

mysqlroothost=$MYSQL_ROOT_HOST
mysqlrootusername=$MYSQL_ROOT_USERNAME
mysqlrootpassword=$MYSQL_ROOT_PASSWORD

# Agregar reglas para protocolo si ssl es igual a letsencrypt
protocolo="http"
if [ "$ssl" == "letsencrypt" ]; then
    protocolo="https"
fi

# sudo ping -c 1 "$domain" &> /dev/null

# # Verifica si el ping falló
# if [ $? -ne 0 ]; then
#     echo "No hay un host disponible para $domain"
#     exit 1
# fi

# Actualizar las URLs en la base de datos
echo "Actualizando las URLs en la base de datos..."
mysql -h "$mysqlroothost" -u "$mysqlrootusername" -p"$mysqlrootpassword" "$mysqldb" -e "
UPDATE wp_options SET option_value = '$protocolo://$domain' WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://$project.devuocloud.com','$protocolo://$domain');
UPDATE wp_posts SET guid = replace(guid, 'https://$project.devuocloud.com','$protocolo://$domain');
UPDATE wp_posts SET post_content = replace(post_content, 'http://$project.devuocloud.com', '$protocolo://$domain');
UPDATE wp_posts SET post_content = replace(post_content, 'https://$project.devuocloud.com', '$protocolo://$domain');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://$project.devuocloud.com','$protocolo://$domain');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'https://$project.devuocloud.com','$protocolo://$domain');
"
if [ $? -ne 0 ]; then
    echo "Error actualizando las URLs en la base de datos."
    exit 1
fi

# Deshabilitar el sitio en Apache
echo "Deshabilitando el sitio en Apache..."
sudo a2dissite $project.conf
if [ $? -ne 0 ]; then
    echo "Error deshabilitando el sitio en Apache."
    exit 1
fi

# Eliminar el archivo de configuración anterior
echo "Eliminando el archivo de configuración anterior..."
sudo rm /etc/apache2/sites-available/$project.conf
if [ $? -ne 0 ]; then
    echo "Error eliminando el archivo de configuración de Apache."
    exit 1
fi

# Crear la nueva configuración de Apache
echo "Creando la nueva configuración de Apache para $project..."
sudo touch /etc/apache2/sites-available/$project.conf
if [ $? -ne 0 ]; then
    echo "Error creando el archivo de configuración de Apache."
    exit 1
fi

# Configuración de Apache
apache_config="
<VirtualHost *:80>
    ServerAdmin prod@uosolutions.com
    ServerName $domain
    ServerAlias www.$domain
    DocumentRoot /var/www/html/$project

    <Directory /var/www/html/$project>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/apache2/$project-error.log
    CustomLog /var/log/apache2/$project-access.log combined
    RewriteEngine on
"

# Agregar reglas de reescritura si ssl es igual a letsencrypt
if [ "$ssl" == "letsencrypt" ]; then
    apache_config+="
    RewriteCond %{SERVER_NAME} =$domain [OR]
    RewriteCond %{SERVER_NAME} =www.$domain
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    "
fi

apache_config+="
</VirtualHost>"
echo "$apache_config" | sudo tee /etc/apache2/sites-available/$project.conf > /dev/null
if [ $? -ne 0 ]; then
    echo "Error escribiendo la configuración de Apache."
    exit 1
fi

# Habilitar el nuevo sitio en Apache
echo "Habilitando el nuevo sitio en Apache..."
sudo a2ensite $project.conf
if [ $? -ne 0 ]; then
    echo "Error habilitando el sitio en Apache."
    exit 1
fi

# Reload Apache
echo "Reload Apache..."
sudo systemctl reload apache2
if [ $? -ne 0 ]; then
    echo "Error reload Apache."
    exit 1
fi

# Ejecutar certbot si ssl es igual a letsencrypt
echo "Validando certbot para $domain y www.$domain..."
if [ "$ssl" == "letsencrypt" ]; then

echo "Ejecutando certbot para $domain y www.$domain..."
sudo certbot --apache -d $domain -d www.$domain --non-interactive --agree-tos
if [ $? -ne 0 ]; then
    echo "Error ejecutando certbot."
    exit 1
fi
fi

echo "Ejecutando validación final de permisos..."
/bin/bash /var/www/html/wordpress-manager-v2/scripts/permissionsDisable.sh "$project"

if [ $? -eq 0 ]; then
    echo "✅ Permisos validados y cerrados correctamente."
else
    echo "⚠️ Advertencia: Hubo un problema al setear los permisos."
fi

echo "Despliegue completado exitosamente."