#!/bin/bash

set -e # Exit at first error

RELEASE_NOTIFICATION_SUMMARY=${RELEASE_NOTIFICATION_SUMMARY:-Atualização}
RELEASE_NOTIFICATION_CONTENT_TEXT=${RELEASE_NOTIFICATION_CONTENT_TEXT:-## Acaba de sair uma versão quentinha do [$CI_PROJECT_NAME]($CI_PROJECT_URL), se liga!}
RELEASE_NOTIFICATION_TEAM_HOOK=${RELEASE_NOTIFICATION_TEAM_HOOK:?Você precisa definir a variável para a notificação de release funcionar.}

VERSION=${1:?É preciso definir a versão que terá as alterações notificadas.}
DATE=`date +%d\/%m\/%Y`

PENULTIMATE_VERSION_RAW=`git describe --abbrev=0 --tags $(git rev-list --tags --skip=1 --max-count=1)`

PENULTIMATE_VERSION=`echo $PENULTIMATE_VERSION_RAW | cut -d ',' -f2 | sed "s/-\([[:digit:]]\)/\.\1/g" | sed "s/[^[:digit:].]//g"`

# Get lines of each version
LINE_VERSION=`awk '/'$VERSION'/{ print NR; exit }' CHANGELOG.md`
LINE_PENULTIMATE_VERSION=`awk '/'$PENULTIMATE_VERSION'/{ print NR; exit }' CHANGELOG.md`

# Get last block of changelog between lines
CHANGELOG_RAW=`sed -n ''$LINE_VERSION','$LINE_PENULTIMATE_VERSION''p CHANGELOG.md`

# Removing unecessary lines, such as the first 3 and the last 2
CHANGELOG=`echo "$CHANGELOG_RAW" | sed -e '1,3d' | head -n -2`

# Get the titles of changes
TITLES=`echo "$CHANGELOG" | grep "###" | awk '{print $0,";"}'`

IFS=';'
TITLES=(`echo "${TITLES//[#]/}"`)
OBJS=()

# Create sections objects for each title
for i in "${!TITLES[@]}"; do
    INDEX="$i"
    TITLE=`echo "${TITLES[$INDEX]}" | xargs`
    NEXT_TITLE=`echo "${TITLES[$INDEX+1]}" | xargs`

    if [ -z "$NEXT_TITLE" ]
    then
      NEXT_TITLE=$PENULTIMATE_VERSION
    fi

    # Get respective content of each title
    CONTENTS_RAW=`echo "$CHANGELOG" | awk '/'$TITLE'/{f=1;next} /'$NEXT_TITLE'/{f=0} f' | sed '/^[[:space:]]*$/d'`

    # Replace each line wrap (\n) to comma and escapes doublequotes
    CONTENTS_RAW=$(echo "$CONTENTS_RAW" | awk -vORS=, '{ print $0 }' | sed -e 's/,$/\n/' -e 's/"/\\"/g')

    # Replace each comma to \n (string, not line wrap)
    CONTENTS=${CONTENTS_RAW//,/\\\n}

    OBJ='
    {
      "startGroup": "true",
      "title": "## '$TITLE'",
      "text": "'$CONTENTS'"
    }
    '

    OBJS+=($OBJ)
done

# array join function
join_by() { local IFS="$1"; shift; echo "$*"; }

OBJS_STR=`join_by , ${OBJS[*]}`

echo "[CI] Enviando notificação de atualização da versão $VERSION para o hook $RELEASE_NOTIFICATION_TEAM_HOOK"

curl -s  \
-X POST $RELEASE_NOTIFICATION_TEAM_HOOK \
-H 'Content-Type: application/json' -d '
{
	"@type": "MessageCard",
	"@context": "https://schema.org/extensions",
	"summary": "'$RELEASE_NOTIFICATION_SUMMARY'",
	"themeColor": "307b9e",
	"title": "Atualização '$VERSION'",
	"sections": [
    {
			"activitySubtitle": "'$DATE'",
      "text": "'$RELEASE_NOTIFICATION_CONTENT_TEXT'",
		},
    '$OBJS_STR'
	]
}
'
