#!/usr/bin/env python
"""
Script de test pour vérifier la génération et l'accès des images de produits en local.
"""
import os
import sys
from PIL import Image, ImageDraw, ImageFont
import random

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

def create_demo_image(filename, text, size=(800, 600), bg_color=(240, 240, 240)):
    """Créer une image de démonstration avec un texte"""
    # Créer une image avec un texte
    img = Image.new('RGB', size, color=bg_color)
    draw = ImageDraw.Draw(img)
    
    # Dessiner un grand rectangle coloré pour le rendre visible
    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 simuler un logo ou une icône
    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(f"{RED}Erreur lors de la sauvegarde de {filename}: {e}{END}")
        return False

def main():
    print(f"{BLUE}===== Test de génération d'images pour les produits et services ====={END}\n")
    
    # 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(f"Vérification des dossiers d'images:")
    print(f"- Dossier produits: {GREEN}{os.path.abspath(products_dir)}{END}")
    print(f"- Dossier services: {GREEN}{os.path.abspath(services_dir)}{END}\n")
    
    # 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(f"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(f"{GREEN}✓ Image produit créée: {full_path}{END}")
    
    # Générer les images de services
    print(f"\nGé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(f"{GREEN}✓ Image service créée: {full_path}{END}")
    
    # Vérifier que les images sont bien créées et accessibles
    print(f"\nVé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(f"{GREEN}✓ {full_path} existe ({size} octets){END}")
        else:
            print(f"{RED}✗ {full_path} MANQUANT!{END}")
            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(f"{GREEN}✓ {full_path} existe ({size} octets){END}")
        else:
            print(f"{RED}✗ {full_path} MANQUANT!{END}")
            all_ok = False
    
    if all_ok:
        print(f"\n{GREEN}===== Toutes les images ont été générées avec succès! ====={END}")
        print(f"\nPour tester le site: exécutez {YELLOW}python main.py{END}")
        print(f"Puis allez sur {YELLOW}http://localhost:5000{END}")
    else:
        print(f"\n{RED}===== Des problèmes ont été détectés lors de la génération des images! ====={END}")

if __name__ == "__main__":
    main()