"""
Compare JSON Strings

Direct comparison of JSON strings to see what's different.
"""

from services.mongo import MongoService
from services.json_loader import JSONLoader
from services.settings_service import SettingsService
from services.json_flattener import JSONFlattener
import json

def compare_json_strings():
    """Compare JSON strings directly."""
    print("=" * 80)
    print("JSON String Comparison")
    print("=" * 80)
    
    # Initialize services
    settings_service = SettingsService()
    config = settings_service.config
    
    mongo_service = MongoService()
    mongo_service.connect()
    
    loader = JSONLoader(
        config['json_sources']['base_path'],
        config['collections']
    )
    
    # Load data
    json_records = loader.load_collection_from_source('odf_rankings', 'ba_glf_2018')
    
    # Get first JSON record
    json_rec = json_records[0]
    json_clean = {k: v for k, v in json_rec.items() if not k.startswith('_')}
    
    # Get matching DB record
    collection = mongo_service.get_collection('odf_rankings')
    db_doc = collection.find_one({
        'competitor.code': json_rec['competitor.code'],
        'odf_body.competition_code': json_rec['odf_body.competition_code'],
        'rank': json_rec['rank']
    })
    
    flattener = JSONFlattener()
    db_flat = flattener.flatten(db_doc)
    db_clean = {k: v for k, v in db_flat.items() if not k.startswith('_')}
    
    # Convert to JSON strings
    json_str = json.dumps(json_clean, sort_keys=True, default=str, indent=2)
    db_str = json.dumps(db_clean, sort_keys=True, default=str, indent=2)
    
    print("\nJSON record (first 1000 chars):")
    print(json_str[:1000])
    
    print("\n" + "=" * 80)
    print("\nDB record (first 1000 chars):")
    print(db_str[:1000])
    
    print("\n" + "=" * 80)
    
    # Find first difference
    json_lines = json_str.split('\n')
    db_lines = db_str.split('\n')
    
    print(f"\nLine count: JSON={len(json_lines)}, DB={len(db_lines)}")
    
    for i, (j_line, d_line) in enumerate(zip(json_lines, db_lines)):
        if j_line != d_line:
            print(f"\nFirst difference at line {i+1}:")
            print(f"  JSON: {j_line}")
            print(f"  DB:   {d_line}")
            break
    
    print("\n" + "=" * 80)

if __name__ == "__main__":
    try:
        compare_json_strings()
    except Exception as e:
        print(f"\n❌ Error: {e}")
        import traceback
        traceback.print_exc()
