# vim: set fileencoding=utf-8
from typing import Optional

from bemani.backend.jubeat.base import JubeatBase
from bemani.common import VersionConstants


class Jubeat(JubeatBase):

    name: str = 'Jubeat'
    version: int = VersionConstants.JUBEAT


class JubeatRipples(JubeatBase):

    name: str = 'Jubeat Ripples'
    version: int = VersionConstants.JUBEAT_RIPPLES

    def previous_version(self) -> Optional[JubeatBase]:
        return Jubeat(self.data, self.config, self.model)


class JubeatRipplesAppend(JubeatBase):

    name: str = 'Jubeat Ripples Append'
    version: int = VersionConstants.JUBEAT_RIPPLES_APPEND

    def previous_version(self) -> Optional[JubeatBase]:
        return JubeatRipples(self.data, self.config, self.model)


class JubeatKnit(JubeatBase):

    name: str = 'Jubeat Knit'
    version: int = VersionConstants.JUBEAT_KNIT

    def previous_version(self) -> Optional[JubeatBase]:
        return JubeatRipplesAppend(self.data, self.config, self.model)


class JubeatKnitAppend(JubeatBase):

    name: str = 'Jubeat Knit Append'
    version: int = VersionConstants.JUBEAT_KNIT_APPEND

    def previous_version(self) -> Optional[JubeatBase]:
        return JubeatKnit(self.data, self.config, self.model)


class JubeatCopious(JubeatBase):

    name: str = 'Jubeat Copious'
    version: int = VersionConstants.JUBEAT_COPIOUS

    def previous_version(self) -> Optional[JubeatBase]:
        return JubeatKnitAppend(self.data, self.config, self.model)


class JubeatCopiousAppend(JubeatBase):

    name: str = 'Jubeat Copious Append'
    version: int = VersionConstants.JUBEAT_COPIOUS_APPEND

    def previous_version(self) -> Optional[JubeatBase]:
        return JubeatCopious(self.data, self.config, self.model)
