
from typing import Callable


class ScheduledCall:
    """
    Object to get tasks periodically scheduled
    """
    def __init__(self, timeToExecute: float, func: Callable, interval: float):
        """
        Use `albow.core.Scheduler.Scheduler.timestamp` as the `timeToExecute` value

        Args:
            timeToExecute:  When we want this function executed

            func: The function to execute

            interval:  How long to delay after -timeToExecute_ has elapsed
        """
        self.time = timeToExecute
        self.func = func
        self.interval = interval

    def __ne__(self, other):
        return not (self == other)

    def __lt__(self, other):
        return self.time < other.time

    def __eq__(self, theOtherOne):
        """
        Overrides the default implementation
        """
        if isinstance(theOtherOne, ScheduledCall):
            if self.time == theOtherOne.time and \
               self.func == theOtherOne.func and \
               self.interval == theOtherOne.interval:
                return True

        return False

    def __le__(self, other):
        return self.time <= other.time

    def __gt__(self, other):
        return self.time > other.time, other

    def __ge__(self, other):
        return self.time >= other.time, other

    def __str__(self):

        formattedMe: str = f"time: {self.time}, func: {self.func}, interval: {self.interval}"
        return formattedMe
