import asyncio
import random
from app.repositories.qdrant_repository import QdrantRepository
from qdrant_client.http import models

async def test_pipeline():
    print("--- Test de connexion Qdrant ---")
    repo = QdrantRepository()
    
    try:
        # 1. Tester la connexion et initialiser la collection
        await repo.init_collection(vector_size=1024)
        
        # 2. Insérer un faux projet pour valider le fonctionnement (Upsert)
        print("\n[Test] Insertion d'un faux projet indexé...")
        mock_vector = [random.uniform(-1.0, 1.0) for _ in range(1024)]
        
        await repo.client.upsert(
            collection_name=repo.collection_name,
            points=[
                models.PointStruct(
                    id=1,
                    vector=mock_vector,
                    payload={
                        "title": "Application E-commerce de test",
                        "description": "Un projet test généré pour valider Qdrant",
                        "git_url": "https://github.com/test/test"
                    }
                )
            ]
        )
        print("[Test] Faux projet inséré.")

        # 3. Tester la recherche vectorielle
        print("\n[Test] Lancement de la recherche vectorielle...")
        project_found = await repo.search_similar_project(query_vector=mock_vector)
        
        if project_found:
            print(f"🎉 Succès ! Projet trouvé en BDD : {project_found['title']} ({project_found['git_url']})")
        else:
            print("❌ Erreur : Aucun projet trouvé alors qu'on vient d'en insérer un.")
            
    except Exception as e:
        print(f"❌ Échec critique du test : {e}")
        print("Vérifie que ton conteneur Qdrant est bien lancé et que l'URL dans ton .env est correcte.")
        
    finally:
        await repo.close()
        print("\n--- Fin du test ---")

if __name__ == "__main__":
    from dotenv import load_dotenv
    load_dotenv()
    
    asyncio.run(test_pipeline())