#ifndef __TRANSPORT_MOUNTAIN_BIKE_H__
#define __TRANSPORT_MOUNTAIN_BIKE_H__

#include <transport/bicycle.h>

namespace transport
{
	/** Mountain bike implementation of a `Bicycle`.
	 *
	 * MountainBike is an implementation of a Bicycle
	 * providing a bike for cycling on rough terrain. Mountain bikes
	 * are pretty cool because they have stuff like **Suspension** (and
	 * you can even adjust it using SetSuspension). If you're looking
	 * for a bike for use on the road, you might be better off using a
	 * RacingBike though.
   *
   * @ingroup mountainbike
	 */
	class MountainBike : public Bicycle
	{
	public:
		/** Set suspension stiffness.
		 * @stiffness the suspension stiffness.
		 *
		 * SetSuspension changes the stiffness of the suspension
		 * on the bike. The method will return false if the stiffness
		 * could not be adjusted.
		 *
		 * @return true if the suspension was adjusted successfully,
		 *         false otherwise.
		 */
		bool SetSuspension(double stiffness);

		/** Change the break type.
		 * @BreakType the break type.
		 * @breakType the type of the break.
		 *
		 * ChangesBreak changes the type of break fitted to the bike.
		 * The method will return false if the break type could not be
		 * fitted.
		 *
		 * @return true if the break was adjusted successfully.
		 *         false otherise
		 */
		template <typename BreakType>
		bool ChangeBreak(BreakType breakType)
		{
			if (breakType)
			{
				return true;
			}

			return false;
		}
	};
}

#endif /* __TRANSPORT_MOUNTAIN_BIKE_H__ */
