from UniTAP.common.timestamp import Timestamp


class ResultObject:
    """
    The base class of all capture results.
    Contains information about `start_capture_time`, `end_capture_time`, `timestamp` and `buffer` with captured data.
    """
    def __init__(self):
        self.__start_capture_time = 0
        self.__end_capture_time = 0
        self.__timestamp = Timestamp(0)
        self.__buffer = []

    @property
    def start_capture_time(self) -> int:
        """
        Return start capture time.

        Returns:
            object of `int` type
        """
        return self.__start_capture_time

    @property
    def end_capture_time(self) -> int:
        """
        Return end capture time.

        Returns:
            object of `int` type
        """
        return self.__end_capture_time

    @property
    def timestamp(self) -> Timestamp:
        """
        Return timestamp.

        Returns:
            object of `Timestamp` type
        """
        return self.__timestamp

    @property
    def buffer(self) -> list:
        """
        Return buffer with captured data.

        Returns:
            object of list type
        """
        return self.__buffer

    @buffer.setter
    def buffer(self, value):
        """
        Set data to buffer

        Args:
            value - any type of object
        """
        self.__buffer.append(value)

    @start_capture_time.setter
    def start_capture_time(self, start_capture_time: int):
        """
        Set start capture time.

        Args:
            start_capture_time (int) - must be more than 0.
        """
        if start_capture_time <= 0:
            raise ValueError(f"Start capture time cannot be less than 0.")
        self.__start_capture_time = start_capture_time

    @end_capture_time.setter
    def end_capture_time(self, end_capture_time: int):
        """
        Set end capture time.

        Args:
            end_capture_time (int) - must be more than 0.
        """
        if end_capture_time <= 0:
            raise ValueError(f"End capture time cannot be less than 0.")
        self.__end_capture_time = end_capture_time

    @timestamp.setter
    def timestamp(self, timestamp: int):
        """
        Set timestamp.

        Args:
            timestamp (int) - must be more than 0.
        """
        if timestamp <= 0:
            raise ValueError(f"Timestamp cannot be less than 0.")
        self.__timestamp.value = timestamp

    def clear(self):
        """
        Clear all data.
        """
        self.__start_capture_time = 0
        self.__end_capture_time = 0
        self.__timestamp = Timestamp(0)
        self.__buffer = []
