/* Copyright 2021 The TensorFlow Authors. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
==============================================================================
*/

package org.tensorflow.lite.examples.poseestimation.data

// 定义一个枚举类 BodyPart，用于表示人体的各个部位
// 每个部位都关联一个整数值，表示该部位在模型中的位置

// BodyPart 枚举类，其中每个枚举值代表一个人体部位
// 枚举类的构造函数接收一个整数值 position，表示该部位的位置信息
enum class BodyPart(val position: Int) {
    NOSE(0),          // 鼻子，位置 0
    LEFT_EYE(1),      // 左眼，位置 1
    RIGHT_EYE(2),     // 右眼，位置 2
    LEFT_EAR(3),      // 左耳，位置 3
    RIGHT_EAR(4),     // 右耳，位置 4
    LEFT_SHOULDER(5), // 左肩，位置 5
    RIGHT_SHOULDER(6),// 右肩，位置 6
    LEFT_ELBOW(7),    // 左肘，位置 7
    RIGHT_ELBOW(8),   // 右肘，位置 8
    LEFT_WRIST(9),    // 左手腕，位置 9
    RIGHT_WRIST(10),  // 右手腕，位置 10
    LEFT_HIP(11),     // 左髋，位置 11
    RIGHT_HIP(12),    // 右髋，位置 12
    LEFT_KNEE(13),    // 左膝，位置 13
    RIGHT_KNEE(14),   // 右膝，位置 14
    LEFT_ANKLE(15),   // 左踝，位置 15
    RIGHT_ANKLE(16);  // 右踝，位置 16

    companion object {
        // 使用一个映射表，将每个部位的位置与 BodyPart 进行关联
        private val map = values().associateBy(BodyPart::position)

        // 根据位置返回对应的 BodyPart
        // 如果传入的位置没有对应的 BodyPart，则抛出异常
        fun fromInt(position: Int): BodyPart = map.getValue(position)
    }
}
