package tim.prune.gui.profile;

import tim.prune.I18nManager;
import tim.prune.data.SpeedCalculator;
import tim.prune.data.SpeedValue;
import tim.prune.data.Track;
import tim.prune.data.UnitSet;

/**
 * Class to provide a source of speed data for the profile chart
 */
public class SpeedData extends ProfileData
{
	/**
	 * Constructor
	 * @param inTrack track object
	 */
	public SpeedData(Track inTrack) {
		super(inTrack);
	}

	/**
	 * Get the data and populate the instance arrays
	 * @param inUnitSet unit set to use
	 */
	public void init(UnitSet inUnitSet)
	{
		setUnitSet(inUnitSet);
		initArrays();
		_hasData = false;
		_minValue = _maxValue = 0.0;
		SpeedValue speed = new SpeedValue();
		if (_track != null)
		{
			for (int i=0; i<_track.getNumPoints(); i++)
			{
				// Get the speed either from the speed value or from the distances and timestamps
				SpeedCalculator.calculateSpeed(_track, i, inUnitSet, speed);
				if (speed.isValid())
				{
					double speedValue = speed.getValue();
					_pointValues[i] = speedValue;
					if (speedValue < _minValue || !_hasData) {_minValue = speedValue;}
					if (speedValue > _maxValue || !_hasData) {_maxValue = speedValue;}
					_hasData = true;
				}
				_pointHasData[i] = speed.isValid();
			}
		}
	}

	/**
	 * @return text description including units
	 */
	public String getLabel()
	{
		return I18nManager.getText("fieldname.speed") + " ("
			+ I18nManager.getText(_unitSet.getSpeedUnit().getShortnameKey()) + ")";
	}

	/**
	 * @return key for message when no speeds present
	 */
	public String getNoDataKey() {
		return "display.notimestamps";
	}
}
