"""
Test file for Chunk 2: Core Models
Run this to verify User and Category models work correctly
"""

def test_chunk2():
    """Test core models implementation"""
    print("Testing Chunk 2: Core Models")

    try:
        # Test imports
        from app import create_app
        from app.models import User, Category, BaseModel
        from app.utils.validators import validate_abn, validate_australian_business_number
        print("✅ All imports successful")

        # Create app context for database operations
        app = create_app()

        with app.app_context():
            from app.extensions import db

            # Create tables
            db.create_all()
            print("✅ Database tables created")

            # Test User model
            user = User(
                email="test.contractor@example.com",
                first_name="Test",
                last_name="User",
                role="contractor",
                phone_number="0412345678",
                location="Sydney, NSW",
                abn_number="12345678901",
                business_name="Test Construction Pty Ltd"
            )
            user.set_password("testpass123")

            db.session.add(user)
            db.session.commit()
            print("✅ User model works")

            # Test password checking
            assert user.check_password("testpass123") == True
            assert user.check_password("wrongpass") == False
            print("✅ Password hashing works")

            # Test Category model
            category = Category(
                name="General Construction",
                description="General building and construction work",
                whs_risk_level="medium",
                insurance_requirements="Public liability $2M minimum"
            )

            db.session.add(category)
            db.session.commit()
            print("✅ Category model works")

            # Test ABN validation
            assert validate_abn("12345678901") == True
            assert validate_abn("123") == False
            print("✅ ABN validation works")

            # Test compliance checking
            is_compliant, issues = user.is_compliance_valid()
            print(f"✅ Compliance check works (compliant: {is_compliant})")

            print("\n🎉 CHUNK 2 COMPLETE - Core models working!")
            print("📊 Database tables: users, categories")
            print("🇦🇺 Australian compliance: ABN, insurance, WHS")
            print("🎮 Gamification: points, levels ready")

            return True

    except Exception as e:
        print(f"❌ Error: {e}")
        import traceback
        traceback.print_exc()
        return False


if __name__ == "__main__":
    test_chunk2()