#!/bin/bash

# Script pour corriger les permissions des fichiers Magento
# =============================================

# Chargement de la configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/00_config.sh"

# Fonction pour afficher les messages de statut
status_message() {
    local type=$1
    local message=$2

    case $type in
        "INFO")
            echo -e "\e[34m[INFO]\e[0m $message"
            ;;
        "OK")
            echo -e "\e[32m[OK]\e[0m $message"
            ;;
        "ERROR")
            echo -e "\e[31m[ERROR]\e[0m $message"
            ;;
        *)
            echo "$message"
            ;;
    esac
}

# Vérification des droits root
if [ "$(id -u)" != "0" ]; then
    status_message "ERROR" "Ce script doit être exécuté en tant que root"
    exit 1
fi

# Vérification de l'existence du répertoire Magento
if [ ! -d "${DEST_MAGENTO_PATH}" ]; then
    status_message "ERROR" "Le répertoire Magento n'existe pas: ${DEST_MAGENTO_PATH}"
    exit 1
fi

# Détection de l'utilisateur et du groupe du serveur web
WEB_USER="$DEST_USER"
WEB_GROUP="$DEST_GROUP"

# Vérification si l'utilisateur nginx existe
if ! id -u $WEB_USER > /dev/null 2>&1; then
    # Si nginx n'existe pas, essayer apache
    if id -u apache > /dev/null 2>&1; then
        WEB_USER="$DEST_USER"
        WEB_GROUP="$DEST_GROUP"
    else
        status_message "ERROR" "Impossible de détecter l'utilisateur du serveur web (nginx ou apache)"
        exit 1
    fi
fi

# Vérification de l'utilisateur Magento
if ! id -u $DEST_USER > /dev/null 2>&1; then
    status_message "ERROR" "L'utilisateur Magento n'existe pas: $DEST_USER"
    exit 1
fi

status_message "INFO" "Correction des permissions pour Magento dans ${DEST_MAGENTO_PATH}..."
status_message "INFO" "Utilisateur du serveur web: ${WEB_USER}:${WEB_GROUP}"
status_message "INFO" "Utilisateur Magento: ${DEST_USER}"

# Définition des permissions
status_message "INFO" "Définition des propriétaires des fichiers..."
chown -R $DEST_USER:$WEB_GROUP $DEST_MAGENTO_PATH

status_message "INFO" "Définition des permissions des répertoires..."
find $DEST_MAGENTO_PATH -type d -exec chmod 750 {} \;

status_message "INFO" "Définition des permissions des fichiers..."
find $DEST_MAGENTO_PATH -type f -exec chmod 640 {} \;

# Permissions spéciales pour les répertoires qui nécessitent des droits d'écriture
status_message "INFO" "Définition des permissions spéciales pour les répertoires qui nécessitent des droits d'écriture..."
chmod -R 770 $DEST_MAGENTO_PATH/var
chmod -R 770 $DEST_MAGENTO_PATH/pub/media
chmod -R 770 $DEST_MAGENTO_PATH/pub/static
chmod -R 770 $DEST_MAGENTO_PATH/generated

# Permissions spéciales pour les fichiers exécutables
status_message "INFO" "Définition des permissions spéciales pour les fichiers exécutables..."
chmod +x $DEST_MAGENTO_PATH/bin/magento

# Nettoyage des caches
status_message "INFO" "Nettoyage des répertoires de cache..."
rm -rf $DEST_MAGENTO_PATH/var/cache/*
rm -rf $DEST_MAGENTO_PATH/var/page_cache/*
rm -rf $DEST_MAGENTO_PATH/var/view_preprocessed/*
rm -rf $DEST_MAGENTO_PATH/pub/static/frontend/*
rm -rf $DEST_MAGENTO_PATH/pub/static/adminhtml/*
rm -rf $DEST_MAGENTO_PATH/pub/static/_cache/*
rm -rf $DEST_MAGENTO_PATH/generated/code/*
rm -rf $DEST_MAGENTO_PATH/generated/metadata/*

# Recréation des répertoires de cache
status_message "INFO" "Recréation des répertoires de cache..."
mkdir -p $DEST_MAGENTO_PATH/var/cache
mkdir -p $DEST_MAGENTO_PATH/var/page_cache
mkdir -p $DEST_MAGENTO_PATH/var/view_preprocessed
mkdir -p $DEST_MAGENTO_PATH/pub/static/frontend
mkdir -p $DEST_MAGENTO_PATH/pub/static/adminhtml
mkdir -p $DEST_MAGENTO_PATH/pub/static/_cache
mkdir -p $DEST_MAGENTO_PATH/generated/code
mkdir -p $DEST_MAGENTO_PATH/generated/metadata

# Définition des permissions pour les répertoires recréés
status_message "INFO" "Définition des permissions pour les répertoires recréés..."
chown -R $DEST_USER:$WEB_GROUP $DEST_MAGENTO_PATH/var
chown -R $DEST_USER:$WEB_GROUP $DEST_MAGENTO_PATH/pub/static
chown -R $DEST_USER:$WEB_GROUP $DEST_MAGENTO_PATH/pub/media
chown -R $DEST_USER:$WEB_GROUP $DEST_MAGENTO_PATH/generated

chmod -R 770 $DEST_MAGENTO_PATH/var
chmod -R 770 $DEST_MAGENTO_PATH/pub/static
chmod -R 770 $DEST_MAGENTO_PATH/pub/media
chmod -R 770 $DEST_MAGENTO_PATH/generated

status_message "OK" "Correction des permissions terminée"
status_message "INFO" "Vous pouvez maintenant exécuter les commandes Magento sans problèmes de permissions"
status_message "INFO" "Exemple: sudo -u ${DEST_USER} php ${DEST_MAGENTO_PATH}/bin/magento setup:upgrade"
