#!/usr/bin/env python
"""
Script de test pour valider le système de stockage adaptatif
"""

import os
import sys
import django
from pathlib import Path

# Configuration de Django
if __name__ == "__main__":
    # Ajouter le répertoire du projet au Python path
    project_root = Path(__file__).parent.parent
    sys.path.insert(0, str(project_root))

    # Configurer les settings Django
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

    # Initialiser Django
    django.setup()

    # Maintenant on peut importer nos modules Django
    from apps.core.storage_backend import (
        get_storage_type,
        get_storage_info,
        validate_storage_configuration,
        create_file_field,
        create_image_field,
        create_video_field,
    )
    from apps.core.models import Document, MediaFile
    from django.conf import settings

    def test_storage_configuration():
        """Test de la configuration du stockage"""
        print("🔧 CONFIGURATION DU STOCKAGE")
        print("=" * 50)

        storage_type = get_storage_type()
        print(f"✅ Type de stockage détecté: {storage_type}")

        storage_info = get_storage_info()
        print(f"📋 Informations détaillées: {storage_info}")

        # Validation de la configuration
        is_valid, errors = validate_storage_configuration()
        if is_valid:
            print("✅ Configuration valide")
        else:
            print("❌ Erreurs de configuration:")
            for error in errors:
                print(f"   - {error}")

        print()

    def test_field_creation():
        """Test de création des champs adaptatifs"""
        print("🏗️  CRÉATION DES CHAMPS ADAPTATIFS")
        print("=" * 50)

        try:
            from apps.core.storage_backend import get_document_upload_path

            # Test création de champ fichier générique
            file_field = create_file_field(get_document_upload_path)
            print(f"✅ Champ fichier créé: {type(file_field).__name__}")

            # Test création de champ image
            image_field = create_image_field(get_document_upload_path)
            print(f"✅ Champ image créé: {type(image_field).__name__}")

            # Test création de champ vidéo
            video_field = create_video_field(get_document_upload_path)
            print(f"✅ Champ vidéo créé: {type(video_field).__name__}")

        except Exception as e:
            print(f"❌ Erreur lors de la création des champs: {e}")

        print()

    def test_models_integration():
        """Test de l'intégration avec les modèles"""
        print("📊 INTÉGRATION AVEC LES MODÈLES")
        print("=" * 50)

        try:
            # Test du modèle Document
            print("📄 Modèle Document:")
            print(f"   - Champ file: {type(Document._meta.get_field('file')).__name__}")

            # Test du modèle MediaFile
            print("🎬 Modèle MediaFile:")
            print(
                f"   - Champ file: {type(MediaFile._meta.get_field('file')).__name__}"
            )

            # Test des métadonnées de stockage via le mixin
            doc_instance = Document()
            if hasattr(doc_instance, "storage_info"):
                print(f"   - StorageBackendMixin intégré: ✅")
                print(f"   - Infos stockage: {doc_instance.storage_info}")
            else:
                print(f"   - StorageBackendMixin: ❌")

        except Exception as e:
            print(f"❌ Erreur lors du test des modèles: {e}")

        print()

    def test_environment_variables():
        """Test des variables d'environnement"""
        print("🌐 VARIABLES D'ENVIRONNEMENT")
        print("=" * 50)

        # Variables importantes à tester
        important_vars = [
            "IS_CLOUDINARY",
            "AWS_STORAGE_BUCKET_NAME",
            "DEFAULT_FILE_STORAGE",
            "CLOUDINARY_CLOUD_NAME",
            "CLOUDINARY_API_KEY",
        ]

        for var in important_vars:
            value = getattr(settings, var, None)
            status = "✅" if value else "❌"
            print(f"   {status} {var}: {value or 'Non défini'}")

        print()

    def test_storage_urls():
        """Test de génération des URLs"""
        print("🔗 GÉNÉRATION DES URLS")
        print("=" * 50)

        try:
            from apps.core.storage_backend import (
                get_file_url,
                get_thumbnail_url,
                get_large_image_url,
            )

            # Créer une instance de test (sans sauvegarder)
            doc = Document(title="Test Document")
            media = MediaFile(title="Test Media", media_type="image")

            # Tester les méthodes du mixin
            print(f"✅ Méthodes StorageBackendMixin disponibles:")
            print(f"   - get_file_url: {hasattr(doc, 'get_file_url')}")
            print(f"   - get_thumbnail_url: {hasattr(doc, 'get_thumbnail_url')}")
            print(f"   - get_large_image_url: {hasattr(doc, 'get_large_image_url')}")

        except Exception as e:
            print(f"❌ Erreur lors du test des URLs: {e}")

        print()

    # Exécution des tests
    def run_all_tests():
        print("🚀 DÉMARRAGE DES TESTS DU SYSTÈME DE STOCKAGE ADAPTATIF")
        print("=" * 60)
        print()

        test_storage_configuration()
        test_field_creation()
        test_models_integration()
        test_environment_variables()
        test_storage_urls()

        print("🏁 TESTS TERMINÉS")
        print("=" * 60)

    run_all_tests()
