import json

# ==================================================================================================


def load_json(path: str):
    with open(path, "r", encoding="utf-8") as file:
        data = json.load(file)
    return data


def save_json(data: dict, path: str):
    with open(path, "w+", encoding="utf-8") as file:
        json.dump(data, file, indent=0)


# ==================================================================================================


def use_whole_body(whole_body: dict) -> bool:
    return any((whole_body[k] for k in whole_body))


# ==================================================================================================


def get_joint_names(whole_body: dict):

    joint_names_2d = [
        "nose",
        "eye_left",
        "eye_right",
        "ear_left",
        "ear_right",
        "shoulder_left",
        "shoulder_right",
        "elbow_left",
        "elbow_right",
        "wrist_left",
        "wrist_right",
        "hip_left",
        "hip_right",
        "knee_left",
        "knee_right",
        "ankle_left",
        "ankle_right",
    ]

    if whole_body["foots"]:
        joint_names_2d.extend(
            [
                "foot_toe_big_left",
                "foot_toe_small_left",
                "foot_heel_left",
                "foot_toe_big_right",
                "foot_toe_small_right",
                "foot_heel_right",
            ]
        )
    if whole_body["face"]:
        joint_names_2d.extend(
            [
                "face_jaw_right_1",
                "face_jaw_right_2",
                "face_jaw_right_3",
                "face_jaw_right_4",
                "face_jaw_right_5",
                "face_jaw_right_6",
                "face_jaw_right_7",
                "face_jaw_right_8",
                "face_jaw_middle",
                "face_jaw_left_1",
                "face_jaw_left_2",
                "face_jaw_left_3",
                "face_jaw_left_4",
                "face_jaw_left_5",
                "face_jaw_left_6",
                "face_jaw_left_7",
                "face_jaw_left_8",
                "face_eyebrow_right_1",
                "face_eyebrow_right_2",
                "face_eyebrow_right_3",
                "face_eyebrow_right_4",
                "face_eyebrow_right_5",
                "face_eyebrow_left_1",
                "face_eyebrow_left_2",
                "face_eyebrow_left_3",
                "face_eyebrow_left_4",
                "face_eyebrow_left_5",
                "face_nose_1",
                "face_nose_2",
                "face_nose_3",
                "face_nose_4",
                "face_nose_5",
                "face_nose_6",
                "face_nose_7",
                "face_nose_8",
                "face_nose_9",
                "face_eye_right_1",
                "face_eye_right_2",
                "face_eye_right_3",
                "face_eye_right_4",
                "face_eye_right_5",
                "face_eye_right_6",
                "face_eye_left_1",
                "face_eye_left_2",
                "face_eye_left_3",
                "face_eye_left_4",
                "face_eye_left_5",
                "face_eye_left_6",
                "face_mouth_1",
                "face_mouth_2",
                "face_mouth_3",
                "face_mouth_4",
                "face_mouth_5",
                "face_mouth_6",
                "face_mouth_7",
                "face_mouth_8",
                "face_mouth_9",
                "face_mouth_10",
                "face_mouth_11",
                "face_mouth_12",
                "face_mouth_13",
                "face_mouth_14",
                "face_mouth_15",
                "face_mouth_16",
                "face_mouth_17",
                "face_mouth_18",
                "face_mouth_19",
                "face_mouth_20",
            ]
        )
    if whole_body["hands"]:
        joint_names_2d.extend(
            [
                "hand_wrist_left",
                "hand_finger_thumb_left_1",
                "hand_finger_thumb_left_2",
                "hand_finger_thumb_left_3",
                "hand_finger_thumb_left_4",
                "hand_finger_index_left_1",
                "hand_finger_index_left_2",
                "hand_finger_index_left_3",
                "hand_finger_index_left_4",
                "hand_finger_middle_left_1",
                "hand_finger_middle_left_2",
                "hand_finger_middle_left_3",
                "hand_finger_middle_left_4",
                "hand_finger_ring_left_1",
                "hand_finger_ring_left_2",
                "hand_finger_ring_left_3",
                "hand_finger_ring_left_4",
                "hand_finger_pinky_left_1",
                "hand_finger_pinky_left_2",
                "hand_finger_pinky_left_3",
                "hand_finger_pinky_left_4",
                "hand_wrist_right",
                "hand_finger_thumb_right_1",
                "hand_finger_thumb_right_2",
                "hand_finger_thumb_right_3",
                "hand_finger_thumb_right_4",
                "hand_finger_index_right_1",
                "hand_finger_index_right_2",
                "hand_finger_index_right_3",
                "hand_finger_index_right_4",
                "hand_finger_middle_right_1",
                "hand_finger_middle_right_2",
                "hand_finger_middle_right_3",
                "hand_finger_middle_right_4",
                "hand_finger_ring_right_1",
                "hand_finger_ring_right_2",
                "hand_finger_ring_right_3",
                "hand_finger_ring_right_4",
                "hand_finger_pinky_right_1",
                "hand_finger_pinky_right_2",
                "hand_finger_pinky_right_3",
                "hand_finger_pinky_right_4",
            ]
        )

    joint_names_2d.extend(
        [
            "hip_middle",
            "shoulder_middle",
            "head",
        ]
    )

    return joint_names_2d
