#!/bin/bash

# Script de permissions Laravel pour PRODUCTION
# Version sécurisée avec permissions minimales
# Usage: sudo ./fix-permissions-production.sh

echo "🔒 Configuration des permissions Laravel pour PRODUCTION..."

# Définir les variables
WEBUSER="www-data"
WEBGROUP="www-data"
APPUSER="laravel"  # Utilisateur dédié pour les tâches Laravel

# Vérifier que le script est exécuté en tant que root
if [ "$EUID" -ne 0 ]; then
    echo "❌ Ce script doit être exécuté avec sudo"
    exit 1
fi

# Créer un utilisateur dédié pour Laravel si il n'existe pas
if ! id "$APPUSER" &>/dev/null; then
    echo "👤 Création de l'utilisateur $APPUSER..."
    useradd -r -s /bin/bash -d /var/www/html -G $WEBGROUP $APPUSER
    echo "✅ Utilisateur $APPUSER créé"
fi

# Ajouter l'utilisateur laravel au groupe www-data
usermod -a -G $WEBGROUP $APPUSER

echo "📂 Configuration des permissions de base..."

# Propriétaire de base : ubuntu pour permettre git et édition, groupe www-data pour le web
chown -R ubuntu:$WEBGROUP .

# Permissions de base sécurisées
find . -type f -exec chmod 644 {} \;  # Fichiers : lecture/écriture propriétaire, lecture groupe
find . -type d -exec chmod 755 {} \;  # Dossiers : accès complet propriétaire, lecture/exécution groupe

# Permissions spéciales pour Git (ubuntu doit pouvoir écrire)
echo "🔧 Configuration Git avec permissions utilisateur..."
chmod -R 755 .git/
chown -R ubuntu:$WEBGROUP .git/

# Permissions spéciales pour .env (ubuntu doit pouvoir écrire)
echo "⚙️ Configuration .env avec permissions utilisateur..."
chmod 664 .env*
chown ubuntu:$WEBGROUP .env* 2>/dev/null || true

# Permissions spéciales pour storage (écriture groupe nécessaire)
echo "🗂️ Configuration storage/ avec permissions sécurisées..."
chmod -R 775 storage/
chmod -R 775 bootstrap/cache/

# Permissions pour sitemaps (écriture groupe nécessaire)
echo "🗺️ Configuration sitemaps/ avec permissions sécurisées..."
if [ -d "public/sitemaps" ]; then
    chmod -R 775 public/sitemaps/
else
    mkdir -p public/sitemaps
    chmod 775 public/sitemaps/
fi

# Permissions pour le dossier public (sitemap.xml)
echo "📄 Configuration public/ pour les sitemaps..."
chown -R ubuntu:www-data /var/www/html/public
chmod -R 775 /var/www/html/public

# Artisan exécutable
chmod +x artisan

# Scripts exécutables
chmod +x *.sh 2>/dev/null || true

# Sécurisation des fichiers sensibles
echo "🔐 Sécurisation des fichiers sensibles..."
chmod 664 .env* 2>/dev/null || true  # Permet écriture par ubuntu, lecture par www-data
chmod 644 config/*.php
chown ubuntu:$WEBGROUP .env* 2>/dev/null || true

echo "✅ Permissions PRODUCTION configurées avec succès !"
echo ""
echo "📋 Configuration appliquée :"
echo "   • Utilisateur dédié: $APPUSER (membre du groupe $WEBGROUP)"
echo "   • Fichiers: 644 (rw-r--r--)"
echo "   • Dossiers: 755 (rwxr-xr-x)"
echo "   • Storage: 775 (rwxrwxr-x)"
echo "   • Bootstrap/cache: 775 (rwxrwxr-x)"
echo "   • Sitemaps: 775 (rwxrwxr-x)"
echo "   • .env: 640 (rw-r-----)"
echo ""
echo "🔄 Configuration du cron pour l'utilisateur $APPUSER :"
echo "   sudo crontab -u $APPUSER -e"
echo "   * * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1"
