using Microsoft.Xna.Framework;
using Jitter.Dynamics;

namespace KinPortal {
	public class DynamicObject : Object {
		public RigidBody PhysicModel {get; private set;}
		public TargetingStrategy TargetingStrategy {get; set;}

		public override Vector3 Pos {
			get {
				return Geometry.GetXnaVector(PhysicModel.Position);
			}
			set {
				PhysicModel.Position = Geometry.GetJitterVector(value);
			}
		}

		public override Quaternion Rot {
			get {
				return Quaternion.CreateFromRotationMatrix(Geometry.GetXnaMatrix(PhysicModel.Orientation));
			}
			set {
				PhysicModel.Orientation = Geometry.GetJitterMatrix(Matrix.CreateFromQuaternion(value));
			}
		}

		public bool IsStatic {
			get {
				return PhysicModel.IsStatic;
			}
			set {
				PhysicModel.IsStatic = value;
			}
		}

		public DynamicObject(string filepath, Vector3 pos, Quaternion rot, Scene scene, ShapeType shapeType, bool isStatic, TargetingStrategy strategy)
				: base(filepath, scene) {
			PhysicModel = new RigidBody(ShapeFactory.CreateShape(Model, shapeType));
			Pos = pos;
			Rot = rot;
			TargetingStrategy = strategy;
			IsStatic = isStatic;
		}

		public DynamicObject(string filepath, Scene scene, ShapeType shapeType)
			: this(filepath, Vector3.Zero, Quaternion.Identity, scene, shapeType, false, new NoTargetingStrategy()) {}

		public void Target(HandsProjection leftHand, HandsProjection rightHand) {
			TargetingStrategy.Target(this, leftHand, rightHand);
		}

		public override void Update(GameTime gameTime) {
			TargetingStrategy.Update(this, gameTime);
			base.Update(gameTime);
		}
	}
}
