from stimuli.AbstractStimulus import AbstractStimulus


class StepStimulus(AbstractStimulus):

    def __init__(self, start, duration, value, base_value=0, seconds=True):
        if duration < 0:
            raise ValueError("Duration cannot be negative")

        self.base_value = base_value
        self.value = value
        if seconds:
            self.start = start
            self.duration = duration
        else:
            self.start = start / 1000
            self.duration = duration / 1000

    def value_at_time_in_s(self, time_point):
        if self.start <= time_point <= self.start + self.duration:
            return self.value
        else:
            return self.base_value

    def get_stimulus_start_s(self):
        return self.start

    def get_stimulus_duration_s(self):
        return self.duration

    def get_amplitude(self):
        return self.value - self.base_value