namespace pdinklag.CPW.Common
{
    /// <summary>
    /// Enumeration of points of interest on a human body.
    /// </summary>
    public enum BodyPOI
    {
        // base position
        Base,

        // head
        HeadTop, // central point on the top of the head
        OccipitalBack, // backmost point of the occipital bone, same height as the eyes

        Forehead, // center of forehead

        // face
        LeftEarCenter, // center of the ear
        RightEarCenter,
        LeftEye, // center of the eyeball's front
        RightEye,
        LeftCheekbone, // cheekbone, typically same height as nose tip
        RightCheekbone,
        LeftTemple, // temple lateral, same height as eyes
        RightTemple,
        NoseTip, // tip of the nose
        LowerLip, // center of the lower lip
        Chin,

        // neck
        Throat, // central front position of neck, position of the adam's apple (for men)
        NeckBack, // same height as throat
        LeftNeckSide, // same height as throat
        RightNeckSide,

        // upper torso
        LeftTrapezius,
        RightTrapezius,
        LeftShoulderFront,
        RightShoulderFront,
        LeftShoulderBack,
        RightShoulderBack,
        Sternum,
        UpperSpine,

        // lower torso
        Stomach,
        LeftAbdomen,
        RightAbdomen,
        Thoracic,
        Groin,
        Buttocks,
        Perineum,

        // arms
        LeftArmpit,
        RightArmpit,
        LeftUpperArmFront,
        LeftUpperArmBack,
        LeftUpperArmMedial,
        LeftUpperArmLateral,
        RightUpperArmFront,
        RightUpperArmBack,
        RightUpperArmMedial,
        RightUpperArmLateral,
        LeftElbow,
        RightElbow,
        LeftInnerElbow,
        RightInnerElbow,

        LeftLowerArmFront,
        LeftLowerArmBack,
        LeftLowerArmMedial,
        LeftLowerArmLateral,
        RightLowerArmFront,
        RightLowerArmBack,
        RightLowerArmMedial,
        RightLowerArmLateral,

        // Hands
        LeftWristMedial,
        LeftWristLateral,
        RightWristMedial,
        RightWristLateral,
        LeftHandPalm, // the center of the palm
        RightHandPalm,
        LeftHandBack, // the hand back
        RightHandBack,
        LeftHandSide, // the side of the hand
        RightHandSide,
        LeftKnuckle, // the part of the hand that will bust up your mouth
        RightKnuckle,
        LeftIndexTip, // tip of the index finger
        RightIndexTip,

        // Legs
        LeftThighFront,
        LeftThighBack,
        LeftThighMedial,
        LeftThighLateral,
        RightThighFront,
        RightThighBack,
        RightThighMedial,
        RightThighLateral,
        LeftKnee,
        RightKnee,
        LeftBackKnee,
        RightBackKnee,
        LeftCalfMedial,
        LeftCalfLateral,
        RightCalfMedial,
        RightCalfLateral,
        LeftCalf,
        RightCalf,
        LeftShin,
        RightShin,

        // Feet
        LeftAchillesHeel,
        LeftAnkleMedial,
        LeftAnkleLateral,
        RightAchillesHeel,
        RightAnkleMedial,
        RightAnkleLateral,
        LeftInstep,
        RightInstep,
        LeftFootBottom,
        RightFootBottom,
        LeftFootTip,
        RightFootTip,
        LeftHeelBack,
        RightHeelBack,

        // the following POIs were introduced in version 0.9.0
        // in order to preserve the validity of serialized values, they were added
        // below this mark, even though the overall order does not seem to make a lot of sense anymore
        LeftParietal, // side of the upper head, same height as forehead)
        RightParietal,
        ParietalBack, // back of the upper head, same height as forehead)

        LeftEarBehind, // point on the ear where glasses would lay on (medial)
        RightEarBehind,
        LeftEarlobe, // center of the earlobe (lateral)
        RightEarlobe,
        LeftEyebrow, // eyebrow position, aligned with eye center
        RightEyebrow,
        NoseBridge, // where the nose starts, typically between the eyes
        UpperLip, // center of the lower lip
        LeftMouthCorner, // mouth corner
        RightMouthCorner,
        LeftJawAngle, // angle of the jaw, typically same height as mouth corners
        RightJawAngle,

        LeftShoulderLateral,
        RightShoulderLateral,
        LeftLateral,
        RightLateral,
        LeftPectorial,
        RightPectorial,
        LeftNipple,
        RightNipple,

        Belly,
        Lumbar,
        LeftWaist,
        RightWaist,

        LeftPelvisLateral,
        RightPelvisLateral,

        LeftElbowMedial,
        LeftElbowLateral,
        RightElbowMedial,
        RightElbowLateral,

        LeftWristFront,
        LeftWristBack,
        RightWristFront,
        RightWristBack,
        LeftThumbTip, // tip of the thumb
        RightThumbTip,

        LeftKneeMedial,
        LeftKneeLateral,
        RightKneeMedial,
        RightKneeLateral,

        LeftAnkleFront,
        LeftHeelBottom,
        LeftFootMedial,
        LeftFootLateral,
        LeftFootBall,
        LeftToesTop,
        LeftToesMedial,
        LeftToesLateral,
        RightAnkleFront,
        RightHeelBottom,
        RightFootMedial,
        RightFootLateral,
        RightFootBall,
        RightToesTop,
        RightToesMedial,
        RightToesLateral,

        // Last entry for iteration, not a valid POI
        Last,
    }
}
