#ifndef BODY_HPP
#define BODY_HPP


namespace nbody {
	static const double timestep = 1.0;
	class Derivative;

	class Body {
	protected:
		double position[3];
		double velocity[3];
		double acceleration[3];
		double weight;

		Derivative evaluate(double dt, Derivative d);
	public:
		Body();
		Body(double positionX, double positionY, double positionZ);
		Body(double positionX, double positionY, double positionZ, double velocityX, double velocityY, double velocityZ);
		Body(double positionX, double positionY, double positionZ, double weight);
		Body(double positionX, double positionY, double positionZ, double velocityX, double velocityY, double velocityZ, double weight);
		virtual ~Body();
		virtual double getPosition(int index);
		virtual double getMass();
		virtual void setPosition(int index, double value);
		virtual void setMass(double value);
		virtual void integrate();
		virtual void print();
	};
}

#endif
