from typing import List, Optional, Type

from bemani.backend.base import Base, Factory
from bemani.backend.mga.mga import MetalGearArcade
from bemani.common import Model
from bemani.data import Config, Data


class MetalGearArcadeFactory(Factory):

    MANAGED_CLASSES: List[Type[Base]] = [
        MetalGearArcade,
    ]

    @classmethod
    def register_all(cls) -> None:
        for gamecode in ['I36']:
            Base.register(gamecode, MetalGearArcadeFactory)

    @classmethod
    def create(cls, data: Data, config: Config, model: Model, parentmodel: Optional[Model]=None) -> Optional[Base]:

        if model.gamecode == 'I36':
            return MetalGearArcade(data, config, model)

        # Unknown game version
        return None