import time
import math

class MockDataSource:
    def __init__(self, frequency=1.0, amplitude=1.0, period=10.0, offset=0.0):
        """Initializes the MockDataSource.

        Args:
            frequency (float): The frequency of the sine wave in Hz.
            amplitude (float): The amplitude of the sine wave.
            period (float): The period of the sine wave in seconds.  Overrides frequency if provided.
            offset (float): A constant offset to add to the sine wave.
        """
        self.amplitude = amplitude
        if period is not None:
            self.frequency = 1.0 / period
        else:
            self.frequency = frequency
        self.offset = offset
        self.start_time = time.time()

    def get_data(self):
        """Generates a data point based on a sine wave.

        Returns:
            float: The current data point.
        """
        elapsed_time = time.time() - self.start_time
        value = self.amplitude * math.sin(2 * math.pi * self.frequency * elapsed_time) + self.offset
        return value

    def reset_timer(self):
        """Resets the internal timer to simulate a fresh start.
        """
        self.start_time = time.time()

if __name__ == '__main__':
    # Example usage
    data_source = MockDataSource(frequency=0.5, amplitude=5.0, offset=2.0)
    for _ in range(10):
        data = data_source.get_data()
        print(f"Data: {data}")
        time.sleep(0.2)

    print("Resetting timer...")
    data_source.reset_timer()

    for _ in range(5):
        data = data_source.get_data()
        print(f"Data after reset: {data}")
        time.sleep(0.2)
