"""
Shared test factories for LangBot tests.

Provides reusable factories for:
- Fake application (app.py)
- Messages and queries (message.py)
- Fake providers (provider.py)
- Fake platforms (platform.py)

Usage:
    from tests.factories import FakeApp, text_query, FakeProvider

    app = FakeApp()
    query = text_query("hello")
    provider = FakeProvider.returns("response")
"""

from tests.factories.app import FakeApp, fake_app
from tests.factories.message import (
    text_chain,
    group_text_chain,
    mention_chain,
    image_chain,
    text_query,
    group_text_query,
    private_text_query,
    command_query,
    mention_query,
    empty_query,
    image_query,
    file_query,
    unsupported_query,
    voice_query,
    at_all_query,
    query_with_session,
    query_with_config,
    friend_message_event,
    group_message_event,
    mock_adapter,
)
from tests.factories.provider import (
    FakeProvider,
    fake_provider,
    fake_provider_pong,
    fake_provider_timeout,
    fake_provider_auth_error,
    fake_provider_rate_limit,
    fake_provider_malformed,
    fake_model,
)
from tests.factories.platform import (
    FakePlatform,
    fake_platform,
    fake_platform_with_streaming,
    fake_platform_with_failure,
    mock_platform_adapter,
)

__all__ = [
    # App
    'FakeApp',
    'fake_app',
    # Message chains
    'text_chain',
    'group_text_chain',
    'mention_chain',
    'image_chain',
    # Message events
    'friend_message_event',
    'group_message_event',
    # Mock adapters
    'mock_adapter',
    # Queries
    'text_query',
    'group_text_query',
    'private_text_query',
    'command_query',
    'mention_query',
    'empty_query',
    'image_query',
    'file_query',
    'unsupported_query',
    'voice_query',
    'at_all_query',
    'query_with_session',
    'query_with_config',
    # Provider
    'FakeProvider',
    'fake_provider',
    'fake_provider_pong',
    'fake_provider_timeout',
    'fake_provider_auth_error',
    'fake_provider_rate_limit',
    'fake_provider_malformed',
    'fake_model',
    # Platform
    'FakePlatform',
    'fake_platform',
    'fake_platform_with_streaming',
    'fake_platform_with_failure',
    'mock_platform_adapter',
]
