#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Qdrant Vektör DB Bağlantı Test Scripti
Web server VM'den çalıştırılacak
"""

import sys
from qdrant_client import QdrantClient
from openai import OpenAI

# Yapılandırma
QDRANT_URL = "http://10.10.10.25:6333"
QDRANT_COLLECTION = "machine_docs"
OPENAI_API_KEY = "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"
EMBEDDING_MODEL = "text-embedding-3-large"

def test_qdrant_connection():
    """Qdrant bağlantısını test et"""
    print("=" * 80)
    print("1. QDRANT BAĞLANTI TESTİ")
    print("=" * 80)
    
    try:
        client = QdrantClient(url=QDRANT_URL, timeout=10)
        
        # Collections listele
        collections = client.get_collections()
        print(f"✅ Qdrant'a bağlanıldı: {QDRANT_URL}")
        print(f"   Toplam collection sayısı: {len(collections.collections)}")
        
        for col in collections.collections:
            print(f"   - {col.name}")
        
        return client
    except Exception as e:
        print(f"❌ Qdrant bağlantı hatası: {e}")
        return None

def test_collection_info(client):
    """Collection bilgilerini kontrol et"""
    print("\n" + "=" * 80)
    print("2. COLLECTION BİLGİLERİ")
    print("=" * 80)
    
    try:
        collection_info = client.get_collection(QDRANT_COLLECTION)
        
        print(f"✅ Collection: {QDRANT_COLLECTION}")
        print(f"   Status: {collection_info.status}")
        print(f"   Vektör sayısı: {collection_info.points_count:,}")
        print(f"   Vektör boyutu: {collection_info.config.params.vectors.size}")
        print(f"   Distance metrik: {collection_info.config.params.vectors.distance}")
        print(f"   Segment sayısı: {collection_info.segments_count}")
        
        return True
    except Exception as e:
        print(f"❌ Collection bilgi hatası: {e}")
        return False

def test_openai_connection():
    """OpenAI API bağlantısını test et"""
    print("\n" + "=" * 80)
    print("3. OPENAI API TESTİ")
    print("=" * 80)
    
    try:
        client = OpenAI(api_key=OPENAI_API_KEY)
        
        # Test embedding oluştur
        test_text = "test"
        response = client.embeddings.create(
            model=EMBEDDING_MODEL,
            input=test_text
        )
        
        embedding = response.data[0].embedding
        
        print(f"✅ OpenAI API çalışıyor")
        print(f"   Model: {EMBEDDING_MODEL}")
        print(f"   Embedding boyutu: {len(embedding)}")
        print(f"   Token kullanımı: {response.usage.total_tokens}")
        
        return client
    except Exception as e:
        print(f"❌ OpenAI API hatası: {e}")
        return None

def test_search(qdrant_client, openai_client):
    """End-to-end arama testi"""
    print("\n" + "=" * 80)
    print("4. ARAMA TESTİ")
    print("=" * 80)
    
    test_query = "motor bakım"
    
    try:
        # Embedding oluştur
        print(f"Sorgu: '{test_query}'")
        print("Embedding oluşturuluyor...")
        
        response = openai_client.embeddings.create(
            model=EMBEDDING_MODEL,
            input=test_query
        )
        query_vector = response.data[0].embedding
        
        # Arama yap
        print("Vektör veritabanında arama yapılıyor...")
        
        search_result = qdrant_client.search(
            collection_name=QDRANT_COLLECTION,
            query_vector=query_vector,
            limit=3,
            with_payload=True
        )
        
        print(f"✅ Arama başarılı! {len(search_result)} sonuç bulundu\n")
        
        # İlk 3 sonucu göster
        for i, hit in enumerate(search_result, 1):
            print(f"[{i}] Benzerlik skoru: {hit.score:.4f}")
            print(f"    Kaynak: {hit.payload.get('source', 'N/A')}")
            print(f"    Sayfa: {hit.payload.get('page', 'N/A')}")
            content = hit.payload.get('content', '')
            print(f"    İçerik önizleme: {content[:150]}...")
            print("-" * 80)
        
        return True
        
    except Exception as e:
        print(f"❌ Arama hatası: {e}")
        return False

def main():
    """Ana test fonksiyonu"""
    print("\n")
    print("╔" + "=" * 78 + "╗")
    print("║" + " " * 20 + "QDRANT VEKTÖR DB BAĞLANTI TESTİ" + " " * 26 + "║")
    print("╚" + "=" * 78 + "╝")
    print()
    
    # Test 1: Qdrant bağlantısı
    qdrant_client = test_qdrant_connection()
    if not qdrant_client:
        print("\n⛔ Qdrant'a bağlanılamadı. Test sonlandırılıyor.")
        print("\nKontrol listesi:")
        print("  1. Qdrant sunucusu çalışıyor mu? (10.10.10.25)")
        print("  2. Firewall kuralları doğru mu?")
        print("  3. Network bağlantısı var mı? (ping 10.10.10.25)")
        sys.exit(1)
    
    # Test 2: Collection bilgileri
    if not test_collection_info(qdrant_client):
        print("\n⛔ Collection bilgileri alınamadı.")
        sys.exit(1)
    
    # Test 3: OpenAI API
    openai_client = test_openai_connection()
    if not openai_client:
        print("\n⛔ OpenAI API'ye bağlanılamadı.")
        sys.exit(1)
    
    # Test 4: End-to-end arama
    if not test_search(qdrant_client, openai_client):
        print("\n⛔ Arama testi başarısız.")
        sys.exit(1)
    
    # Başarı mesajı
    print("\n" + "=" * 80)
    print("✅ TÜM TESTLER BAŞARILI!")
    print("=" * 80)
    print("\nSistem hazır! Web uygulamanızda kullanabilirsiniz.")
    print()

if __name__ == "__main__":
    main()

