#!/usr/bin/env python
"""
Script pour générer les images de démonstration pour le projet GMPL.
Run avec: python generate_demo_images.py
"""
import os
import sys
import random
from PIL import Image, ImageDraw, ImageFont

# Couleurs pour l'affichage console
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BLUE = '\033[94m'
BOLD = '\033[1m'
END = '\033[0m'

def print_header(text):
    print(f"\n{BLUE}{'=' * 60}{END}")
    print(f"{BLUE}{BOLD} {text} {END}")
    print(f"{BLUE}{'=' * 60}{END}\n")

def print_success(text):
    print(f"{GREEN}✓ {text}{END}")

def print_error(text):
    print(f"{RED}✗ {text}{END}")

def print_info(text):
    print(f"{YELLOW}> {text}{END}")

def create_demo_image(filename, text, size=(800, 600), bg_color=(240, 240, 240)):
    """Créer une image de démonstration pour un produit ou service"""
    # Créer une image avec un fond
    img = Image.new('RGB', size, color=bg_color)
    draw = ImageDraw.Draw(img)
    
    # Dessiner un rectangle pour le produit
    main_color = (random.randint(50, 200), random.randint(50, 200), random.randint(50, 200))
    x1, y1 = size[0]*0.1, size[1]*0.1
    x2, y2 = size[0]*0.9, size[1]*0.9
    draw.rectangle((x1, y1, x2, y2), fill=main_color)
    
    # Dessiner un cercle au milieu pour un logo
    center_x, center_y = size[0] // 2, size[1] // 2
    radius = min(size[0], size[1]) // 4
    draw.ellipse(
        (center_x - radius, center_y - radius, center_x + radius, center_y + radius),
        fill=(255, 255, 255)
    )
    
    # Dessiner un moteur stylisé dans le cercle
    inner_radius = radius * 0.7
    x1 = center_x - inner_radius
    y1 = center_y - inner_radius*0.6
    x2 = center_x + inner_radius
    y2 = center_y + inner_radius*0.6
    draw.rectangle((x1, y1, x2, y2), fill=(80, 80, 80))
    
    # Ajouter des détails au moteur
    for i in range(4):
        offset = inner_radius * 0.4 * i / 3 - inner_radius * 0.6
        x1 = center_x + offset
        y1 = center_y - inner_radius*0.8
        x2 = center_x + offset + inner_radius*0.3
        y2 = center_y + inner_radius*0.8
        draw.rectangle((x1, y1, x2, y2), fill=(120, 120, 120))
    
    # Ajouter du texte en bas
    draw.text(
        (center_x, center_y + radius + 40),
        text,
        fill=(0, 0, 0),
        anchor="mt"
    )
    
    # Ajouter un texte GMPL en haut
    draw.text(
        (center_x, center_y - radius - 40),
        "GMPL",
        fill=(0, 0, 100),
        anchor="mb"
    )
    
    # S'assurer que le répertoire existe
    os.makedirs(os.path.dirname(filename), exist_ok=True)
    
    # Sauvegarder l'image
    try:
        img.save(filename, format='JPEG', quality=90)
        return True
    except Exception as e:
        print_error(f"Erreur lors de la sauvegarde de {filename}: {e}")
        return False

def setup_demo_images():
    """Prépare toutes les images de démonstration"""
    print_header("GÉNÉRATION DES IMAGES DE DÉMONSTRATION")
    
    # Définir les dossiers d'images
    products_dir = os.path.join('static', 'uploads', 'products')
    services_dir = os.path.join('static', 'uploads', 'services')
    
    # Créer les répertoires s'ils n'existent pas
    os.makedirs(products_dir, exist_ok=True)
    os.makedirs(services_dir, exist_ok=True)
    
    print_info(f"Dossier produits: {os.path.abspath(products_dir)}")
    print_info(f"Dossier services: {os.path.abspath(services_dir)}")
    print()
    
    # Liste des images à générer
    product_images = [
        "demo_motor1.jpg",
        "demo_motor2.jpg",
        "demo_part1.jpg",
        "demo_part2.jpg",
        "demo_part3.jpg"
    ]
    
    service_images = [
        "demo_service1.jpg",
        "demo_service2.jpg",
        "demo_service3.jpg"
    ]
    
    # Générer les images de produits
    print_info("Génération des images de produits:")
    
    for i, img_name in enumerate(product_images):
        full_path = os.path.join(products_dir, img_name)
        if create_demo_image(full_path, f"Produit {i+1} - Moteur/Pièce", bg_color=(230, 240, 250)):
            print_success(f"Image produit créée: {full_path}")
    
    # Générer les images de services
    print()
    print_info("Génération des images de services:")
    
    for i, img_name in enumerate(service_images):
        full_path = os.path.join(services_dir, img_name)
        if create_demo_image(full_path, f"Service {i+1} - Maintenance", bg_color=(240, 250, 230)):
            print_success(f"Image service créée: {full_path}")
    
    # Vérifier que les images sont bien créées et accessibles
    print()
    print_info("Vérification des images créées:")
    
    all_ok = True
    
    # Vérifier les images de produits
    for img_name in product_images:
        full_path = os.path.join(products_dir, img_name)
        if os.path.exists(full_path):
            size = os.path.getsize(full_path)
            print_success(f"{full_path} existe ({size} octets)")
        else:
            print_error(f"{full_path} MANQUANT!")
            all_ok = False
    
    # Vérifier les images de services
    for img_name in service_images:
        full_path = os.path.join(services_dir, img_name)
        if os.path.exists(full_path):
            size = os.path.getsize(full_path)
            print_success(f"{full_path} existe ({size} octets)")
        else:
            print_error(f"{full_path} MANQUANT!")
            all_ok = False
    
    if all_ok:
        print()
        print_success("Toutes les images ont été générées avec succès!")
        return True
    else:
        print()
        print_error("Des problèmes ont été détectés lors de la génération des images!")
        return False

if __name__ == "__main__":
    # Vérifier que PIL est installé
    try:
        from PIL import Image
        setup_demo_images()
        print()
        print_info(f"Pour tester le site avec les nouvelles images:")
        print(f"  1. Exécutez {YELLOW}python run_local.py{END}")
        print(f"  2. Accédez à {YELLOW}http://localhost:5000{END}")
    except ImportError:
        print_error("Pillow (PIL) n'est pas installé! Exécutez: pip install Pillow")
        sys.exit(1)