#
# Copyright Super iPaaS Integration LLC, an IBM Company 2024
#!/bin/bash

#1. check the current label
#2. based on the success / fail input, we can remove and add label if not same label.

set -e
SET_STATUS=$1
STATIC_SCAN_SUCCESS="static-scan-success"
STATIC_SCAN_FAILED="static-scan-failed"

source "${ONE_PIPELINE_PATH}"/tools/get_repo_params
APP_TOKEN_PATH="./app-token"
PR_URL=$(get_env PR_URL "")
PR_NUMBER=$(echo "$PR_URL" | grep -oP '(?<=pulls/)[0-9]+')
echo "$PR_NUMBER"
read -r APP_REPO_NAME APP_REPO_OWNER APP_SCM_TYPE APP_API_URL < <(get_repo_params "$(load_repo app-repo url)" "$APP_TOKEN_PATH")

fetch_pr_labels_from_github() {
  curl -s -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" \
    -H "Accept: application/vnd.github+json" \
    "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/issues/$PR_NUMBER/labels"
}

get_current_label_status() {
  fetch_pr_labels_from_github | jq -r '.[].name'
}

remove_label() {
  local label_to_remove="$1"
  curl -s -X DELETE \
    -H "Authorization: Bearer $(cat "${APP_TOKEN_PATH}")" \
    -H "Accept: application/vnd.github+json" \
    "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/issues/${PR_NUMBER}/labels/${label_to_remove}"
}
set_label() {
  local label="$1"
  curl -s -X POST \
    -H "Authorization: Bearer $(cat "${APP_TOKEN_PATH}")" \
    -H "Accept: application/vnd.github+json" \
    -d "{\"labels\": [\"$label\"]}" \
    "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/issues/${PR_NUMBER}/labels"
}

update_label() {
  local current_label="$1"
  local new_label="$2"
  remove_label "$current_label"
  curl -s -X POST \
    -H "Authorization: Bearer $(cat "${APP_TOKEN_PATH}")" \
    -H "Accept: application/vnd.github+json" \
    -d "{\"labels\": [\"$new_label\"]}" \
    "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/issues/${PR_NUMBER}/labels"

  echo "updated new label : $new_label"
}

add_static_scan_label() {
  echo "get status from logs: $SET_STATUS"
  readarray -t labels <<<"$(get_current_label_status)"
  if [ ${#labels[@]} -eq 0 ]; then
    echo "No existing labels. Setting label: $SET_STATUS"
    set_label "$SET_STATUS"
    exit 0
  fi
  echo "Total labels: ${labels[*]}"
  for label in "${labels[@]}"; do
    echo "Found label: $label"
    if [ "$label" = "$STATIC_SCAN_SUCCESS" ] && [ "$SET_STATUS" = "$STATIC_SCAN_FAILED" ]; then
      echo "current label is: $label and set status : $SET_STATUS  need to updated failed label ( label name : $STATIC_SCAN_FAILED)"
      update_label "$label" "$STATIC_SCAN_FAILED"
      exit 0
    elif [ "$label" = "$STATIC_SCAN_FAILED" ] && [ "$SET_STATUS" = "$STATIC_SCAN_SUCCESS" ]; then
      echo "current label is: $label and set status : $SET_STATUS  need to updated success label ( label name : $STATIC_SCAN_SUCCESS)"
      update_label "$label" "$STATIC_SCAN_SUCCESS"
      exit 0
    fi
  done
  echo "No matching label found. Setting new label: $SET_STATUS"
  set_label "$SET_STATUS"
}

add_static_scan_label
