
#!/usr/bin/env python3
"""
Test Gamification System with proper data cleanup
"""

from app import create_app
from app.models import User, PointActivity, Achievement, Leaderboard
from app.extensions import db
from app.utils.gamification import award_points, check_achievements
import random
import string

def test_gamification():
    """Test gamification system with unique test data"""
    
    print("🎮 Testing Gamification with SQLite...")
    
    app = create_app()
    
    with app.app_context():
        # Generate unique identifiers
        unique_id = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
        unique_email = f"test_{unique_id}@example.com"
        unique_abn = f"9876543210{random.randint(0, 9)}"
        
        # Clean up any existing test data
        existing_user = User.query.filter_by(email=unique_email).first()
        if existing_user:
            db.session.delete(existing_user)
            db.session.commit()
        
        # Create test user
        test_user = User(
            email=unique_email,
            first_name="Test",
            last_name="User", 
            role="worker",
            phone_number="0412345678",
            location="Sydney",
            abn_number=unique_abn,
            password_hash="test_hash"
        )
        
        db.session.add(test_user)
        db.session.flush()  # Get the ID without committing
        
        user_id = test_user.id
        print(f"✅ User created: {user_id}")
        
        # Test point awarding
        try:
            award_points(user_id, 500, "Test completion")
            print("✅ Points awarded: 500")
        except Exception as e:
            print(f"❌ Points error: {e}")
        
        # Check user points
        db.session.refresh(test_user)
        print(f"✅ Total points: {test_user.total_points}")
        print(f"✅ Level: {test_user.current_level}")
        
        # Test achievements
        try:
            check_achievements(user_id)
            print("✅ Achievement check completed")
        except Exception as e:
            print(f"❌ Achievement error: {e}")
        
        # Commit all changes
        db.session.commit()
        
        print("🎉 Gamification system working!")

if __name__ == "__main__":
    test_gamification()
