#include "Parameter.h"

Parameter::Parameter(std::string name, double value): name_(name), startValue_(value)
{
	endValue_ = value;
	timeStep_ = 1;
	velocity_ = 0;
	enabled_ = false;
}

void Parameter::setEndValue(double endValue)
{
	endValue_ = endValue;
}

void Parameter::setTimeStep(double tstep)
{
	timeStep_ = tstep;
}

void Parameter::setVelocity(double velocity)
{
	velocity_ = velocity;
}

void Parameter::setEnabled(bool b )
{
	enabled_ = b;
}

std::string Parameter::name() const
{
	return name_;
}

double Parameter::startValue() const
{
	return startValue_;
}

double Parameter::endValue() const
{
	return endValue_;
}

double Parameter::timeStep() const
{
	return timeStep_;
}

double Parameter::velocity() const
{
	return velocity_;
}

bool Parameter::enabled() const
{
	return enabled_;
}

void Parameter::addParameterTimePoint(double time, double value)
{
	timePoints_[time] = value;
}

double Parameter::getParameterValue(double time)
{
	double closestTime = 1e9;
	double closestValue = 0;
	for (auto tp : timePoints_)
	{
		if (abs(tp.first - time) < abs(closestTime - time))
		{
			closestTime = tp.first;
			closestValue = tp.second;
		}
	}
	return closestValue;
}

std::map<double, double> Parameter::timePoints()
{
	return timePoints_;
}
