#!/bin/bash

# Function to get application properties (version and language)
get_app_properties() {
    version="none"
    language="none"

    # Check for Java application (Maven)
    if [ -f "../pom.xml" ]; then
        version=$(xmllint --xpath "string(/project/version)" ../pom.xml)
        language="java"
    # Check for Node.js application
    elif [ -f "../package.json" ]; then
        version=$(jq -r '.version' ../package.json)
        language="node"
    # Check for Kotlin application (Gradle Kotlin DSL)
    elif [ -f "../build.gradle.kts" ]; then
        version=$(grep -m 1 'version' ../build.gradle.kts | awk '{print $NF}' | tr -d '"')
        language="kotlin"
    fi

    echo "$version,$language"
}

# Function to notify Elastic APM of a new deployment
notify_apm() {
    APM_SERVER_URL="https://a4a6f9a1a48d4e84a0e0d9d69b091b92.apm.europe-west1.gcp.cloud.es.io:443/intake/v2/events"
    APM_SECRET_TOKEN="${ELASTIC_APM_TOKEN}"
    APM_SERVICE_NAME="${APPLICATION_NAME}"

    echo "APPLICATION_NAME = $APM_SERVICE_NAME"

    curl -X POST \
         -H "Content-Type: application/json" \
         -H "Authorization: Bearer $APM_SECRET_TOKEN" \
         -d "{
               \"service\": {\"name\": \"$APM_SERVICE_NAME\"},
               \"version\": \"$version\",
               \"environment\": \"${STACK}\"
             }" \
         "$APM_SERVER_URL"
}

# Function to send data to Elasticsearch
send_to_elasticsearch() {
    URL_ES='https://elastic:Pcv4s6Yq0yL813cthlzoFrQx@8a3af794e5b7464c9389dd64dee07860.europe-west1.gcp.cloud.es.io:9243'
    es_index='deploys'

    # Generate Elasticsearch document ID
    value="${RELEASE_NAME}-${GITLAB_USER_NAME}-${date_deploy}"
    ID=$(echo -n "$value" | md5sum | awk '{print $1}')

    # Send data to Elasticsearch
    curl -s -XPUT "$URL_ES/$es_index/_doc/$ID" -H 'Content-Type: application/json' -d "$data"
}

# MAIN
date_deploy=$(date -u +%Y-%m-%dT%H:%M:%SZ)

# Get application properties
version_language=$(get_app_properties)
version=$(echo "$version_language" | cut -d ',' -f 1)
language=$(echo "$version_language" | cut -d ',' -f 2)

# Build data payload
data="{\"date\":\"$date_deploy\",\"@timestamp\":\"$date_deploy\",\"app_name\":\"${RELEASE_NAME}\",\"environment\":\"${CI_ENVIRONMENT_NAME}\",\"deployed_by\":\"${GITLAB_USER_NAME}\",\"version\":\"$version\",\"language\":\"$language\",\"pipeline_status\":\"${1}\"}"

# Send data to Elasticsearch
send_to_elasticsearch

# Notify Elastic APM of a new deployment
#notify_apm

