#!/bin/bash

# Script d'installation automatique pour RDV Planner Pro sur Apache
# Exécutez avec: sudo bash install.sh

set -e

echo "=== Installation de RDV Planner Pro ==="

# Variables
DOMAIN="xarine2.hopto.org"
PROJECT_DIR="/var/www/html/rdv-planner"
SERVICE_USER="www-data"

echo "Domaine configuré: $DOMAIN"

# 1. Mise à jour du système
echo "Mise à jour du système..."
apt update && apt upgrade -y

# 2. Installation des dépendances
echo "Installation des dépendances..."
apt install -y curl git wget gnupg2 software-properties-common \
    apache2 certbot python3-certbot-apache ufw \
    build-essential

# 3. Installation de Node.js 18
echo "Installation de Node.js..."
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs

# 4. Installation de MongoDB
echo "Installation de MongoDB..."
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-6.0.list
apt update
apt install -y mongodb-org

# 5. Installation de PM2
echo "Installation de PM2..."
npm install -g pm2

# 6. Configuration MongoDB
echo "Configuration de MongoDB..."
systemctl start mongod
systemctl enable mongod

# 7. Création du répertoire du projet
echo "Création du répertoire du projet..."
mkdir -p $PROJECT_DIR

# 8. Copie des fichiers (assumant que le script est exécuté depuis le répertoire du projet)
echo "Copie des fichiers du projet..."
cp -r . $PROJECT_DIR/
cd $PROJECT_DIR

# 9. Installation des dépendances Node.js
echo "Installation des dépendances Node.js..."
npm ci --production

# 10. Configuration du fichier .env
echo "Configuration du fichier .env..."
if [ ! -f .env ]; then
    cp .env.example .env
    
    # Générer un secret JWT
    JWT_SECRET=$(openssl rand -base64 32)
    sed -i "s/JWT_SECRET=votre-secret-jet-ici/JWT_SECRET=$JWT_SECRET/" .env
    sed -i "s/MONGODB_URI=mongodb:\/\/localhost:27017\/rdv-planner/MONGODB_URI=mongodb:\/\/localhost:27017\/rdv-planner/" .env
    sed -i "s/PORT=3000/PORT=3000/" .env
    sed -i "s/NODE_ENV=development/NODE_ENV=production/" .env
    
    echo "Fichier .env configuré. Veuillez le modifier pour ajouter vos configurations email."
fi

# 11. Configuration Apache
echo "Configuration Apache..."
sed "s/votre-domaine.com/$DOMAIN/g" apache-config.conf > /etc/apache2/sites-available/rdv-planner.conf

# 12. Activation des modules Apache
echo "Activation des modules Apache..."
a2enmod proxy proxy_http proxy_wstunnel rewrite headers ssl deflate expires

# 13. Activation du site Apache
echo "Activation du site Apache..."
a2ensite rdv-planner.conf
a2dissite 000-default.conf

# 14. Configuration du firewall
echo "Configuration du firewall..."
ufw allow ssh
ufw allow 'Apache Full'
ufw --force enable

# 15. Configuration des permissions
echo "Configuration des permissions..."
chown -R $SERVICE_USER:$SERVICE_USER $PROJECT_DIR
chmod -R 755 $PROJECT_DIR

# 16. Création des répertoires de logs
echo "Création des répertoires de logs..."
mkdir -p /var/log/rdv-planner
chown $SERVICE_USER:$SERVICE_USER /var/log/rdv-planner

# 17. Configuration du service systemd
echo "Configuration du service systemd..."
cat > /etc/systemd/system/rdv-planner.service << EOF
[Unit]
Description=RDV Planner Pro
After=network.target

[Service]
Type=simple
User=$SERVICE_USER
WorkingDirectory=$PROJECT_DIR
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable rdv-planner

# 18. Démarrage des services
echo "Démarrage des services..."
systemctl start mongod
systemctl start rdv-planner
systemctl restart apache2

# 19. Configuration SSL
echo "Configuration SSL avec Let's Encrypt..."
certbot --apache -d $DOMAIN -d www.$DOMAIN --non-interactive --agree-tos --email admin@$DOMAIN

# 20. Configuration PM2
echo "Configuration PM2..."
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup

# 21. Configuration du cron pour le renouvellement SSL
echo "Configuration du renouvellement SSL..."
(crontab -l 2>/dev/null; echo "0 12 * * * /usr/bin/certbot renew --quiet") | crontab -

# 22. Test de l'installation
echo "Test de l'installation..."
sleep 5

if systemctl is-active --quiet rdv-planner; then
    echo "Service RDV Planner: OK"
else
    echo "Service RDV Planner: ERREUR"
fi

if systemctl is-active --quiet apache2; then
    echo "Service Apache: OK"
else
    echo "Service Apache: ERREUR"
fi

if systemctl is-active --quiet mongod; then
    echo "Service MongoDB: OK"
else
    echo "Service MongoDB: ERREUR"
fi

# 23. Affichage des informations
echo ""
echo "=== Installation terminée ==="
echo "URL de l'application: https://$DOMAIN"
echo "URL d'administration: https://$DOMAIN/admin"
echo ""
echo "Logs de l'application:"
echo "  - Application: sudo journalctl -u rdv-planner -f"
echo "  - Apache: sudo tail -f /var/log/apache2/rdv-planner-error.log"
echo "  - MongoDB: sudo tail -f /var/log/mongodb/mongod.log"
echo ""
echo "Commandes utiles:"
echo "  - Redémarrer l'application: sudo systemctl restart rdv-planner"
echo "  - Redémarrer Apache: sudo systemctl restart apache2"
echo "  - Vérifier PM2: pm2 status"
echo "  - Vérifier les logs PM2: pm2 logs"
echo ""
echo "Prochaines étapes:"
echo "1. Configurez vos paramètres email dans $PROJECT_DIR/.env"
echo "2. Accédez à https://$DOMAIN pour vérifier l'installation"
echo "3. Créez votre premier sondage"
echo ""
echo "L'installation est terminée !"
