#!/usr/bin/env python3
"""
Test the fuzzy search specifically for Eazy-E.
"""

import psycopg2
import psycopg2.extras
from fuzzywuzzy import fuzz

# Database configuration
DB_HOST = "172.18.0.2"
DB_PORT = 5432
DB_NAME = "musicbrainz_db"
DB_USER = "musicbrainz"
DB_PASSWORD = "musicbrainz"

def test_fuzzy_eazy_e():
    """Test fuzzy search for Eazy-E."""
    print("🔍 Testing fuzzy search for Eazy-E...")
    
    try:
        connection = psycopg2.connect(
            host=DB_HOST,
            port=DB_PORT,
            database=DB_NAME,
            user=DB_USER,
            password=DB_PASSWORD,
            connect_timeout=10
        )
        cursor = connection.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
        
        print("✅ Connected to database")
        
        # Get all artists that might match Eazy-E
        print("\n1. Getting potential matches for 'Eazy-E'...")
        cursor.execute("SELECT name, gid FROM artist WHERE name ILIKE '%Eazy%' OR name ILIKE '%Sleazy%' LIMIT 20")
        artists = cursor.fetchall()
        
        print(f"   Found {len(artists)} potential matches:")
        for artist in artists:
            score = fuzz.ratio('Eazy-E'.lower(), artist['name'].lower())
            print(f"     {artist['name']} (MBID: {artist['gid']}) - Score: {score}")
        
        # Find the best match
        best_match = None
        best_score = 0
        
        for artist in artists:
            score = fuzz.ratio('Eazy-E'.lower(), artist['name'].lower())
            if score > best_score:
                best_score = score
                best_match = artist
        
        print(f"\n2. Best match: {best_match['name']} (Score: {best_score})")
        
        # Check if there's an Eazy-E with different dash
        print("\n3. Checking for Eazy-E with different dash character...")
        cursor.execute("SELECT name, gid FROM artist WHERE name LIKE '%Eazy%E%' LIMIT 10")
        eazy_variants = cursor.fetchall()
        
        print(f"   Found {len(eazy_variants)} Eazy-E variants:")
        for artist in eazy_variants:
            print(f"     '{artist['name']}' (MBID: {artist['gid']})")
            # Show the exact characters
            for i, char in enumerate(artist['name']):
                if char in ['-', '‐', '–', '—']:
                    print(f"       Character {i}: '{char}' (ord: {ord(char)})")
        
        cursor.close()
        connection.close()
        
    except Exception as e:
        print(f"❌ Error: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    test_fuzzy_eazy_e() 