def helper_shot_information()

in data-analytics/minigolf-demo/cloud_function/gemini.py [0:0]


def helper_shot_information(df):
    SHOT_DICT = {
        1: "Hole-in-one!",
        2: "birdie!",
        3: "par!",
        4: "bogey.",
        5: "double bogey.",
        6: "triple bogey.",
        7: "quadruple bogey.",
        8: "double par."
    }
    SHOT_NUM_DICT = {1: "1st", 2: "2nd", 3: "3rd"}
    filtered_df = df[df['shot_number'] > 0].sort_values(by='frame_number')
    is_last_shot_hole_in = filtered_df['distance'].iloc[-1] < 30
    total_shot_num = filtered_df['shot_number'].iloc[-1]
    grade = SHOT_DICT[total_shot_num] if total_shot_num <= 8 else SHOT_DICT[8]

    shot_details = []
    for i in range(1, total_shot_num + 1):
        shot = SHOT_NUM_DICT.get(i, f"{i}th")
        shot_details.append(f"The {shot} shot was ")
        if i < total_shot_num or (i == total_shot_num and not is_last_shot_hole_in):
            shot_details.append("not ")
        shot_details.append("hole-in.\n")
    shot_details = ''.join(shot_details)

    result = "didn't make" if is_last_shot_hole_in else "made"
    
    if is_last_shot_hole_in:
        result = f"made with {total_shot_num} shot/shots! {grade}"
        if total_shot_num > 3:
            result += " The player loses."
        else:
            result += " The player wins!"

    commentary = f"""
    {shot_details}
    The ball {result}
    """
    return commentary