#!/bin/bash

# Script de génération des diagrammes Mermaid
# Génère les diagrammes à partir des fichiers .mmd

set -e

echo "🎨 Génération des diagrammes Mermaid..."

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Fonction pour afficher les messages
print_status() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Vérifier que Mermaid CLI est installé
check_mermaid() {
    if ! command -v mmdc &> /dev/null; then
        print_error "Mermaid CLI n'est pas installé. Installation..."
        npm install -g @mermaid-js/mermaid-cli
    fi
    print_success "Mermaid CLI disponible"
}

# Créer le répertoire de sortie
create_output_dir() {
    mkdir -p docs-assets/images
    print_success "Répertoire de sortie créé"
}

# Générer les diagrammes
generate_diagrams() {
    local input_dir="docs-assets/mermaid"
    local output_dir="docs-assets/images"
    
    print_status "Génération des diagrammes depuis $input_dir..."
    
    # Architecture actuelle
    if [ -f "$input_dir/architecture-current.mmd" ]; then
        print_status "Génération de l'architecture actuelle..."
        mmdc -i "$input_dir/architecture-current.mmd" -o "$output_dir/architecture-current.png" -t dark
        print_success "Architecture actuelle générée"
    fi
    
    # Schéma de base de données
    if [ -f "$input_dir/database-schema.mmd" ]; then
        print_status "Génération du schéma de base de données..."
        mmdc -i "$input_dir/database-schema.mmd" -o "$output_dir/database-schema.png" -t dark
        print_success "Schéma de base de données généré"
    fi
    
    # Séquence d'authentification
    if [ -f "$input_dir/sequence-auth.mmd" ]; then
        print_status "Génération de la séquence d'authentification..."
        mmdc -i "$input_dir/sequence-auth.mmd" -o "$output_dir/sequence-auth.png" -t dark
        print_success "Séquence d'authentification générée"
    fi
    
    # Séquence de chat
    if [ -f "$input_dir/sequence-chat.mmd" ]; then
        print_status "Génération de la séquence de chat..."
        mmdc -i "$input_dir/sequence-chat.mmd" -o "$output_dir/sequence-chat.png" -t dark
        print_success "Séquence de chat générée"
    fi
    
    # Séquence de streaming
    if [ -f "$input_dir/sequence-streaming.mmd" ]; then
        print_status "Génération de la séquence de streaming..."
        mmdc -i "$input_dir/sequence-streaming.mmd" -o "$output_dir/sequence-streaming.png" -t dark
        print_success "Séquence de streaming générée"
    fi
}

# Générer les diagrammes en SVG
generate_svg() {
    local input_dir="docs-assets/mermaid"
    local output_dir="docs-assets/images"
    
    print_status "Génération des diagrammes SVG..."
    
    for file in "$input_dir"/*.mmd; do
        if [ -f "$file" ]; then
            local basename=$(basename "$file" .mmd)
            print_status "Génération SVG de $basename..."
            mmdc -i "$file" -o "$output_dir/$basename.svg" -t dark
        fi
    done
    
    print_success "Diagrammes SVG générés"
}

# Générer les diagrammes en PDF
generate_pdf() {
    local input_dir="docs-assets/mermaid"
    local output_dir="docs-assets/images"
    
    print_status "Génération des diagrammes PDF..."
    
    for file in "$input_dir"/*.mmd; do
        if [ -f "$file" ]; then
            local basename=$(basename "$file" .mmd)
            print_status "Génération PDF de $basename..."
            mmdc -i "$file" -o "$output_dir/$basename.pdf" -t dark
        fi
    done
    
    print_success "Diagrammes PDF générés"
}

# Nettoyer les anciens diagrammes
cleanup() {
    print_status "Nettoyage des anciens diagrammes..."
    rm -f docs-assets/images/*.png
    rm -f docs-assets/images/*.svg
    rm -f docs-assets/images/*.pdf
    print_success "Anciens diagrammes supprimés"
}

# Fonction principale
main() {
    echo "🎨 Veza Platform - Générateur de Diagrammes"
    echo "=========================================="
    
    # Vérifications
    check_mermaid
    create_output_dir
    
    # Options de génération
    case "${1:-all}" in
        "clean")
            cleanup
            ;;
        "png")
            generate_diagrams
            ;;
        "svg")
            generate_svg
            ;;
        "pdf")
            generate_pdf
            ;;
        "all")
            cleanup
            generate_diagrams
            generate_svg
            generate_pdf
            ;;
        *)
            echo "Usage: $0 [clean|png|svg|pdf|all]"
            echo "  clean - Nettoyer les anciens diagrammes"
            echo "  png   - Générer les diagrammes PNG"
            echo "  svg   - Générer les diagrammes SVG"
            echo "  pdf   - Générer les diagrammes PDF"
            echo "  all   - Générer tous les formats (défaut)"
            exit 1
            ;;
    esac
    
    print_success "Génération terminée !"
    echo ""
    echo "📁 Diagrammes générés dans : docs-assets/images/"
    echo "🎯 Formats disponibles : PNG, SVG, PDF"
    echo ""
    echo "📝 Pour utiliser dans la documentation :"
    echo "  ![Architecture](images/architecture-current.png)"
    echo "  ![Database](images/database-schema.png)"
}

# Exécuter la fonction principale
main "$@"
