using KinectUtils;
using Microsoft.Kinect;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyGesturesBank
{
    public class SwipeRightHand : Gesture
    {

        private float previousX = float.NaN;

        protected override bool TestInitialConditions(Body body)
        {
            var handRight = body.Joints[JointType.HandRight].Position;
            var shoulderRight = body.Joints[JointType.ShoulderRight].Position;

            // Conditions initiales : main droite au niveau ou à droite de l'épaule droite, mais pas trop éloignée
            return handRight.X >= shoulderRight.X && handRight.X - shoulderRight.X < 0.5f;
        }

        protected override bool TestPosture(Body body)
        {
            var handRight = body.Joints[JointType.HandRight].Position;
            var head = body.Joints[JointType.Head].Position;

            // La main droite ne doit pas être plus haute que la tête
            return handRight.Y <= head.Y;
        }

        protected override bool TestRunningGesture(Body body)
        {
            var handRight = body.Joints[JointType.HandRight].Position.X;

            if (!float.IsNaN(previousX))
            {
                // Vérifie si la main droite se déplace vers la droite
                bool isMovingRight = handRight > previousX;
                previousX = handRight;
                return isMovingRight;
            }

            previousX = handRight;
            return false;
        }

        protected override bool TestEndConditions(Body body)
        {
            var handRight = body.Joints[JointType.HandRight].Position;
            var spineBase = body.Joints[JointType.SpineBase].Position;

            // Condition de fin : la main droite est bien à droite de la base de la colonne vertébrale
            return handRight.X > spineBase.X + 0.5f; // Ajustez cette valeur selon le besoin
        }
        public override string GestureName => "Swipe Right Hand";
    }

}
