#!/bin/bash

# Couleurs & styles
RED="\e[31m"
GREEN="\e[32m"
YELLOW="\e[33m"
BLUE="\e[36m"
MAGENTA="\e[35m"
BOLD="\e[1m"
RESET="\e[0m"

# Spinner animé + barre combinés
progress_spinner() {
    local pid=$1
    local width=20
    local spin=("⠋" "⠙" "⠸" "⠴" "⠦" "⠧" "⠇" "⠏")
    local i=0

    printf "   ["; for ((j=0;j<width;j++)); do printf " "; done; printf "]"

    while kill -0 $pid 2>/dev/null; do
        i=$(( (i+1) % ${#spin[@]} ))
        printf "\r   ["
        for ((j=0;j<width;j++)); do
            if (( j <= i )); then
                printf "▓"
            else
                printf " "
            fi
        done
        printf "] ${YELLOW}${spin[i]}${RESET} En cours..."
        sleep 0.08
    done

    # Remplir la barre entièrement à la fin
    printf "\r   ["
    for ((j=0;j<width;j++)); do
        printf "▓"
    done
    printf "] ${GREEN}✅ Terminé${RESET}\n"
}

# Intro stylée
intro() {
    clear
    echo -e "${MAGENTA}${BOLD}"
    echo "╔════════════════════════════════════════╗"
    echo "║    DÉBUT DE LA MISE À JOUR DU PROJET   ║"
    echo "╚════════════════════════════════════════╝"
    echo -e "${RESET}\n"
}

# Outro stylée
outro() {
    echo -e "\n${MAGENTA}${BOLD}"
    echo "╔════════════════════════════════════════╗"
    echo "║    MISE À JOUR TERMINÉE AVEC SUCCÈS !  ║"
    echo "╚════════════════════════════════════════╝"
    echo -e "${RESET}"
}

# Étape animée
step() {
    local title=$1
    local cmd=$2
    echo -e "${BOLD}${YELLOW}$title${RESET}"

    # Exécute la commande en arrière-plan
    bash -c "$cmd" > /dev/null 2>&1 &
    pid=$!
    disown $pid  # supprime le message [1]+ Done

    # Spinner + barre combinés
    progress_spinner $pid
    echo ""
}

# ====== Lancement ======
intro

step "📥 Étape 1 : Récupération des dernières modifications depuis Git..." \
     "git pull origin main"

step "📦 Étape 2 : Installation des dépendances (sans les dépendances de dev)..." \
     "composer install --no-dev --optimize-autoloader"

step "🧩 Étape 3 : Exécution des migrations de base de données..." \
     "bin/console doctrine:migration:migrate -n"

step "🧹 Étape 4 : Nettoyage du cache..." \
     "bin/console cache:clear"

outro
