import abc


class AbstractModel(abc.ABC):

    @abc.abstractmethod
    def open_model(self) -> None:
        raise NotImplemented

    @abc.abstractmethod
    def close_model(self) -> None:
        raise NotImplemented

    @abc.abstractmethod
    def get_activity_changes(self, platform: str, leaderboard_type: str, limit: int, low_timestamp, high_timestamp)\
            -> list:
        raise NotImplemented

    @abc.abstractmethod
    def insert_leaderboard_db(self, leaderboard_list: dict) -> None:
        raise NotImplemented

    @abc.abstractmethod
    def get_diff_action_id(self, action_id: int) -> list:
        raise NotImplemented

    @abc.abstractmethod
    def get_leaderboard_sum_history(self, platform: str, leaderboard_type: str) -> list[dict]:
        raise NotImplemented

    @abc.abstractmethod
    def get_leaderboard_by_action_id(self, action_id: int) -> list[dict]:
        raise NotImplemented

    def get_latest_leaderboard(self, platform: str, leaderboard_type: str) -> list[dict]:
        raise NotImplemented