"""The time slice."""


class TimeSlice:
    """Time slice.

    The time slice is used to provide a context of events around an event
    of interest.

    Attributes:
      duration (int): duration of the time slice in minutes.
      event_timestamp (int): event timestamp of the time slice or None.
    """

    _MICRO_SECONDS_PER_MINUTE = 60 * 1000000

    def __init__(self, event_timestamp, duration=5):
        """Initializes the time slice.

        Args:
          event_timestamp (int): event timestamp of the time slice or None.
          duration (Optional[int]): duration of the time slice in minutes.
              The default is 5, which represent 2.5 minutes before and 2.5 minutes
              after the event timestamp.
        """
        super().__init__()
        self.duration = duration
        self.event_timestamp = event_timestamp

    @property
    def end_timestamp(self):
        """int: slice end timestamp or None."""
        if self.event_timestamp:
            return self.event_timestamp + (
                self.duration * self._MICRO_SECONDS_PER_MINUTE
            )

        return None

    @property
    def start_timestamp(self):
        """int: slice start timestamp or None."""
        if self.event_timestamp:
            return self.event_timestamp - (
                self.duration * self._MICRO_SECONDS_PER_MINUTE
            )

        return None
