#!/bin/bash

# Demander les informations nécessaires
read -p "Entrez votre nom de domaine : " domain
read -p "Entrez le répertoire d'installation (/var/www/) : " directory

# Étape 1 : Installer Nginx, Certbot et Certbot Nginx, et créer un certificat SSL
echo "Installation de Nginx, Certbot et Certbot Nginx..."
apt update
apt install sudo curl nginx unzip mariadb-server zip curl lsb-release apt-transport-https ca-certificates certbot python3-certbot-nginx -y

# Étape 2 : Installer les autres dépendances
echo "Installation des dépendances..."
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
apt update -y
apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-pgsql php8.2-sqlite3 php8.2-bcmath php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-gd

echo "Création du certificat SSL pour le domaine $domain..."
sudo certbot certonly --nginx -d $domain

# Étape 3 : Télécharger et décompresser Azuriom
echo "Téléchargement et installation d'Azuriom..."
sudo mkdir -p /var/www/$directory
sudo wget -O /var/www/$directory/AzuriomInstaller.zip https://github.com/Azuriom/AzuriomInstaller/releases/latest/download/AzuriomInstaller.zip
sudo unzip /var/www/$directory/AzuriomInstaller.zip -d /var/www/$directory
sudo chown -R www-data:www-data /var/www/$directory

# Configurer Nginx pour Azuriom
echo "Configuration de Nginx pour Azuriom..."
cat << EOF | sudo tee /etc/nginx/sites-available/azuriom-$domain
server {
    listen 80;
    server_name $domain;
    return 301 https://\$server_name\$request_uri;
}
server {
    listen 443 ssl http2;
    server_name $domain;
    root /var/www/$directory/public;
    ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305";
    ssl_prefer_server_ciphers on;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    add_header Referrer-Policy "strict-origin-when-cross-origin";
    index index.html index.htm index.php;
    charset utf-8;
    location / {
        try_files \$uri \$uri/ /index.php?\$query_string;
    }
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    error_page 404 /index.php;
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/azuriom-$domain /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

# Vérifier si cron est installé, sinon l'installer
if ! pgrep cron > /dev/null; then
    echo "Cron non installé. Installation en cours..."
    sudo apt-get install cron -y
fi

# Ajouter la tâche cron pour Azuriom
(crontab -l 2>/dev/null; echo "* * * * * cd /var/www/$directory && php artisan schedule:run >> /dev/null 2>&1") | crontab -

echo "La tâche cron pour Azuriom a été configurée."

# Étape 4 : Configurer MySQL
echo "Configuration de la base de données MySQL pour Azuriom..."
db_password=$(openssl rand -base64 12)
safe_domain=$(echo "$domain" | tr -cd 'A-Za-z0-9_')
sudo mysql -u root <<_EOF_
CREATE USER 'azuriom$safe_domain'@'127.0.0.1' IDENTIFIED BY '$db_password';
CREATE DATABASE azuriom$safe_domain;
GRANT ALL PRIVILEGES ON azuriom$safe_domain.* TO 'azuriom$safe_domain'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit
_EOF_

echo -e "\e[1;32m========================================\e[0m"
echo -e "\e[1;33mUtilisateur MySQL et base de données créés.\e[0m"
echo -e "\e[1;34m----------------------------------------\e[0m"
echo -e "\e[1;35mNom d'utilisateur MySQL :\e[0m \e[1;36mazuriom$safe_domain\e[0m"
echo -e "\e[1;35mMot de passe MySQL :\e[0m \e[1;36m$db_password\e[0m"
echo -e "\e[1;34m----------------------------------------\e[0m"
echo -e "\e[1;32mAzuriom est maintenant installé.\e[0m"
echo -e "\e[1;32mVeuillez compléter la configuration via votre navigateur.\e[0m"
echo -e "\e[1;32m========================================\e[0m"