from abc import (
    ABCMeta,
    abstractmethod,
)

from typing import (
    Dict,
    List,
)

from devicemanager.model import (
    DeviceStatus,
    DeviceStatusHistory,
)


class DeviceManagerRepository(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def get_disabled_devices(self):
        # type: (...) -> Dict[str, DeviceStatus]

        raise NotImplementedError()

    def get_devices_with_last_history(
        self,
        device_names,  # type: List[str]
    ):
        # type: (...) -> List[DeviceStatus]

        raise NotImplementedError()

    def create_device_status(
        self,
        device_name,  # type: str
    ):
        # type (...) -> None

        raise NotImplementedError()

    def delete_device_status(
        self,
        device_name,  # type: str
    ):
        # type (...) -> None

        raise NotImplementedError()

    def create_device_status_history(
        self,
        device_name,            # type: str
        device_status_history,  # type: DeviceStatusHistory
    ):
        # type (...) -> None

        raise NotImplementedError()
