"""
neuroflow -- Python SDK for NeuroFlow.

The official Python SDK for NeuroFlow, the hardware-agnostic neural data
platform. Connect to EEG/BCI devices, stream real-time brain data, and
extract neuroscience features with zero neuro-expertise required.

Quick start (remote, via API server)::

    import neuroflow

    client = neuroflow.Client(api_url="http://localhost:8000", api_key="nf_xxx")
    devices = client.discover()

    session = client.start_session(devices[0].id, pipeline="meditation")
    for data in session.stream(metrics=["focus", "alpha_power"]):
        print(data.features)
    session.stop()

Quick start (local, no server needed)::

    from neuroflow import LocalClient

    client = LocalClient()
    device = client.connect(board_id=-1)  # Synthetic board
    device.start_stream()

    features = device.get_features()
    print(f"Alpha power: {features.band_powers.get('avg_alpha_power', 0)}")

    data = device.get_current_data(seconds=1.0)
    print(f"Channels: {data.channel_names}")

    device.stop_stream()
    device.disconnect()
"""

from neuroflow.client import AsyncClient, Client, NeuroFlowAPIError
from neuroflow.device import LocalDevice, RemoteDevice
from neuroflow.local_client import LocalClient
from neuroflow.models import (
    Device,
    DeviceStatus,
    Features,
    PipelineInfo,
    Session,
    SessionData,
    SessionStatus,
    StreamData,
    StreamMessageType,
    SystemStatus,
)
from neuroflow.session import SessionHandle
from neuroflow.stream import DataStream, SyncDataStream

__version__ = "0.1.0"

__all__ = [
    # Main clients
    "Client",
    "AsyncClient",
    "LocalClient",
    # Device classes
    "RemoteDevice",
    "LocalDevice",
    # Session
    "SessionHandle",
    # Streaming
    "DataStream",
    "SyncDataStream",
    # Models
    "Device",
    "DeviceStatus",
    "Session",
    "SessionStatus",
    "SessionData",
    "StreamData",
    "StreamMessageType",
    "Features",
    "PipelineInfo",
    "SystemStatus",
    # Exceptions
    "NeuroFlowAPIError",
    # Version
    "__version__",
]
