#!/bin/bash

# input parameter
commit_sha="$1"
environment="$2"
repository_name="$3"
workflow_id="$4"
workflow_event="$5"
project_name="$6"
category="$7"

send_job_detail() {
  local job_name="$1"
  local job_conclusion="$2"
  local job_started_at="$3"
  local job_completed_at="$4"
  local job_duration=$5
  local workflow_url="$6"
  local workflow_name="$7"

  json_payload=$(cat <<EOF
{
  "jobname": "$job_name",
  "jobconclusion": "$job_conclusion",
  "jobstartedat": "$job_started_at",
  "jobcompletedat": "$job_completed_at",
  "jobduration": $job_duration,
  "workflowname": "$workflow_name",
  "workflowurl": "$workflow_url",
  "workflowevent": "$workflow_event",
  "workflowid": "$workflow_id",
  "repositoryname": "$repository_name",
  "commitsha": "$commit_sha",
  "environment": "$environment",
  "projectname": "$project_name",
  "category": "$category"
}
EOF
)

  echo "$json_payload"
  sleep 3
 
  # POST 요청
  curl -X POST "https://blossomops.sandbox.groundxdev.com/v1/dora/update/workflow" \
    -H "Content-Type: application/json" \
    -d "$json_payload"
}


# init setting 
job_json_data=$(cat jobs-jq.json)
workflow_json_data=$(cat workflow-jq.json)
len=$(echo $job_json_data | jq '.jobs | length')
last_index=$((len - 1))
calculate_index=$((last_index - 1))
html_url=$(echo $job_json_data | jq -r ".jobs[0].html_url")
start_check=false

# worflow
workflow_url=$(echo $workflow_json_data | jq -r ".html_url")
workflow_name=$(echo $workflow_json_data | jq -r ".name")

convert_date_to_seconds() {
  local date_str="$1"
  if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    date -d "$date_str" +%s
  elif [[ "$OSTYPE" == "darwin"* ]]; then
    date -j -f "%Y-%m-%d %H:%M:%S" "$date_str" +%s
  fi
}

for ((i=0; i<$last_index; i++)); do
  job_name=$(echo $job_json_data | jq -r ".jobs[$i].name")
  job_conclusion=$(echo $job_json_data | jq -r ".jobs[$i].conclusion")
  job_started_at=$(echo $job_json_data | jq -r ".jobs[$i].started_at" | sed 's/T/ /' | sed 's/Z//')
  job_completed_at=$(echo $job_json_data | jq -r ".jobs[$i].completed_at" | sed 's/T/ /' | sed 's/Z//')

  if [[ $job_completed_at != "null" ]] && [[ $job_conclusion != "skipped" && $job_conclusion != "cancelled" ]]; then
    if [[ $start_check == "false" ]]; then
      first_start_sec=$(convert_date_to_seconds "$job_started_at")
      start_check=true
    fi
    start_sec=$(convert_date_to_seconds "$job_started_at")
    end_sec=$(convert_date_to_seconds "$job_completed_at")
    job_duration=$((end_sec - start_sec))
    
    send_job_detail "$job_name" "$job_conclusion" "$job_started_at" "$job_completed_at" "$job_duration" "$workflow_url" "$workflow_name"
  fi
done
last_end_sec=$end_sec
echo "FirstTimeStamp: $first_start_sec"
echo "LastTimeStamp: $last_end_sec"

total_duration=$((last_end_sec - first_start_sec))
echo "Total Duration completion: $total_duration seconds"