from dataclasses import dataclass

"""
# osc slightly different, interface would need adjusting to support this mixer.

@dataclass
class X32KindMap:
    id_: str = "X32"
    num_dca: int = 8
    num_strip: int = 32
    num_bus: int = 16
    num_fx: int = 8
    num_rtn: int = 6
"""


@dataclass
class KindMap:
    def __str__(self) -> str:
        return self.id_


@dataclass
class MR18KindMap(KindMap):
    # note ch 17-18 defined as aux rtn
    id_: str
    num_dca: int = 4
    num_strip: int = 16
    num_bus: int = 6
    num_fx: int = 4
    num_rtn: int = 4


@dataclass
class XR16KindMap(KindMap):
    id_: str
    num_dca: int = 4
    num_strip: int = 16
    num_bus: int = 4
    num_fx: int = 4
    num_rtn: int = 4


@dataclass
class XR12KindMap(KindMap):
    id_: str
    num_dca: int = 4
    num_strip: int = 12
    num_bus: int = 2
    num_fx: int = 4
    num_rtn: int = 4


_kinds = {
    "XR18": MR18KindMap(id_="XR18"),
    "MR18": MR18KindMap(id_="MR18"),
    "XR16": XR16KindMap(id_="XR16"),
    "XR12": XR12KindMap(id_="XR12"),
}


def get(kind_id):
    return _kinds[kind_id]


all = list(kind for kind in _kinds.values())
