#!/bin/bash

# Configuration du cron Laravel pour PRODUCTION
# Utilise un utilisateur dédié pour la sécurité
# Usage: sudo ./setup-cron-production.sh

echo "⏰ Configuration du cron Laravel pour PRODUCTION..."

APPUSER="laravel"
WEBGROUP="www-data"

# 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

# Vérifier si cette instance doit exécuter les tâches cron
echo "🔍 Vérification du ServerName de l'instance EC2..."

# Obtenir un token pour IMDSv2
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" -s --max-time 5 2>/dev/null)

if [ -z "$TOKEN" ]; then
    echo "⚠️ Métadonnées EC2 non disponibles (IMDSv2 non accessible)"
    
    # Utiliser une variable d'environnement pour le test local
    if [ -n "$LOCAL_SERVER_NAME" ]; then
        SERVER_NAME="$LOCAL_SERVER_NAME"
        echo "🏷️ ServerName (local): $SERVER_NAME"
    else
        echo "❌ Pour tester en local, définissez: export LOCAL_SERVER_NAME=dev_1"
        echo "❌ Ou vérifiez la configuration IMDSv2 de l'instance EC2"
        exit 1
    fi
else
    # Obtenir l'instance ID avec IMDSv2
    INSTANCE_ID=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s --max-time 5 http://169.254.169.254/latest/meta-data/instance-id 2>/dev/null)
    
    if [ -z "$INSTANCE_ID" ]; then
        echo "❌ Impossible d'obtenir l'instance ID"
        exit 1
    fi

    echo "📍 Instance ID: $INSTANCE_ID"

    # Obtenir la région avec IMDSv2
    REGION=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s --max-time 5 http://169.254.169.254/latest/meta-data/placement/region 2>/dev/null)
    if [ -z "$REGION" ]; then
        REGION="eu-west-1"  # Région par défaut
    fi

    echo "🌍 Région: $REGION"

    # Utiliser AWS CLI pour obtenir le tag ServerName
    SERVER_NAME=$(aws ec2 describe-tags --region "$REGION" --filters "Name=resource-id,Values=$INSTANCE_ID" "Name=key,Values=ServerName" --query 'Tags[0].Value' --output text 2>/dev/null)

    if [ "$SERVER_NAME" = "None" ] || [ -z "$SERVER_NAME" ]; then
        echo "❌ Tag ServerName non trouvé sur l'instance EC2"
        echo "Veuillez ajouter le tag 'ServerName' avec la valeur 'prod_1' ou 'dev_1'"
        exit 1
    fi

    echo "🏷️ ServerName: $SERVER_NAME"
fi

# Vérifier si cette instance doit exécuter les tâches cron
if [ "$SERVER_NAME" != "prod_1" ] && [ "$SERVER_NAME" != "dev_1" ]; then
    echo "⏭️ Cette instance ($SERVER_NAME) n'est pas configurée pour exécuter les tâches cron"
    echo "Seules les instances avec ServerName = 'prod_1' ou 'dev_1' exécutent les tâches planifiées"
    echo "✅ Configuration ignorée - pas d'action requise"
    exit 0
fi

echo "✅ Cette instance ($SERVER_NAME) est autorisée à exécuter les tâches cron"

# Vérifier que l'utilisateur laravel existe
if ! id "$APPUSER" &>/dev/null; then
    echo "❌ L'utilisateur $APPUSER n'existe pas. Exécutez d'abord fix-permissions-production.sh"
    exit 1
fi

# Créer le fichier cron temporaire
CRON_FILE="/tmp/laravel_cron"

cat > $CRON_FILE << 'EOF'
# Laravel Task Scheduler
# Runs every minute to check for scheduled tasks

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Laravel schedule runner
* * * * * cd /var/www/html && php artisan schedule:run >> /var/log/laravel-cron.log 2>&1

# Rotation des logs toutes les semaines (dimanche à 2h)
0 2 * * 0 cd /var/www/html && echo "$(tail -1000 /var/log/laravel-cron.log)" > /var/log/laravel-cron.log

EOF

# Installer le cron pour l'utilisateur laravel
echo "📝 Installation du cron pour l'utilisateur $APPUSER..."
crontab -u $APPUSER $CRON_FILE

# Créer le fichier de log avec les bonnes permissions
touch /var/log/laravel-cron.log
chown $APPUSER:$WEBGROUP /var/log/laravel-cron.log
chmod 664 /var/log/laravel-cron.log

# Nettoyer
rm $CRON_FILE

echo "✅ Cron configuré avec succès !"
echo ""
echo "📋 Configuration :"
echo "   • Utilisateur cron: $APPUSER (non-privilégié)"
echo "   • Fréquence: Toutes les minutes"
echo "   • Log: /var/log/laravel-cron.log"
echo "   • Rotation: Automatique chaque dimanche"
echo ""
echo "🔍 Vérification :"
echo "   sudo crontab -u $APPUSER -l"
echo ""
echo "📊 Monitoring :"
echo "   tail -f /var/log/laravel-cron.log"
