from algorithm import algorithm
import json
import math


class cycle(algorithm):
    def __init__(self):
        self.config_dict_ = None
        self.config_ = None
        self.amplitude_base_ = 0.0
        self.time_base_ = 10.0
        self.start_angle_base_ = 0.0

    def set_config(self, config):
        self.config_ = config
        self.config_dict_ = json.loads(self.config_)
        self.amplitude_base_ = self.config_dict_["CYCLE_AMPLITUDE_BASE"]
        self.time_base_ = self.config_dict_["CYCLE_TIME_BASE"]
        self.start_angle_base_ = self.config_dict_["CYCLE_START_ANGLE_BASE"]

    def config(self):
        return self.config_

    def eval(self, value, times):
        return value + self.amplitude_base_ * math.sin((2 * math.pi * times / self.time_base_) + self.start_angle_base_)
