from dataclasses import dataclass
from enum import Enum
from typing import Union

DeviceType = Union[int, str]


@dataclass
class AudioDevice:
    """
    Maps the properties of an audio device.
    """

    index: int
    name: str
    hostapi: int
    max_input_channels: int
    max_output_channels: int
    default_samplerate: int
    default_low_input_latency: float = 0
    default_low_output_latency: float = 0
    default_high_input_latency: float = 0
    default_high_output_latency: float = 0


class AudioState(Enum):
    """
    Audio states.
    """

    STOPPED = 'STOPPED'
    RUNNING = 'RUNNING'
    PAUSED = 'PAUSED'


class StreamType(Enum):
    """
    Stream types.
    """

    INPUT = 'input'
    OUTPUT = 'output'