"""
Fix Email Index Script

This script fixes the duplicate key error on email field by:
1. Dropping the existing unique email_1 index
2. Creating a partial unique index that allows multiple null values
"""

import sys
from services.mongo import MongoService

def fix_email_index():
    """Fix the email index in people collection."""
    print("=" * 60)
    print("Email Index Fix Script")
    print("=" * 60)
    
    # Initialize MongoDB service
    print("\n1. Connecting to MongoDB...")
    mongo_service = MongoService()
    
    if not mongo_service.connect():
        print("❌ Failed to connect to MongoDB")
        error = mongo_service.get_connection_error()
        if error:
            print(f"Error: {error}")
        return False
    
    print("✅ Connected to MongoDB")
    
    # Collection name
    collection_name = "people"
    
    # List current indexes
    print(f"\n2. Checking current indexes on '{collection_name}' collection...")
    indexes = mongo_service.list_indexes(collection_name)
    
    print(f"Found {len(indexes)} indexes:")
    for idx in indexes:
        index_name = idx.get('name', 'N/A')
        unique = idx.get('unique', False)
        partial = 'partialFilterExpression' in idx
        print(f"  - {index_name} (Unique: {unique}, Partial: {partial})")
    
    # Check if email_1 exists
    email_index_exists = any(idx.get('name') == 'email_1' for idx in indexes)
    
    if email_index_exists:
        print(f"\n3. Dropping existing 'email_1' index...")
        if mongo_service.drop_index(collection_name, "email_1"):
            print("✅ Successfully dropped 'email_1' index")
        else:
            print("⚠️ Failed to drop 'email_1' index (it might not exist)")
    else:
        print(f"\n3. Index 'email_1' not found, skipping drop step")
    
    # Create partial unique index
    print(f"\n4. Creating partial unique index on 'email' field...")
    if mongo_service.create_partial_unique_index(collection_name, "email"):
        print("✅ Successfully created partial unique index 'email_1_partial'")
        print("\n" + "=" * 60)
        print("SUCCESS! Email index has been fixed.")
        print("=" * 60)
        print("\nYou can now import records with null email values.")
        print("The index will still enforce uniqueness for non-null emails.")
        return True
    else:
        print("❌ Failed to create partial unique index")
        return False

if __name__ == "__main__":
    try:
        success = fix_email_index()
        sys.exit(0 if success else 1)
    except Exception as e:
        print(f"\n❌ Error: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
