#!/bin/bash

# Check that this can be sourced by cron at actual runtime

# Env vars:
# ---	Webhook URLs for given channel, eg $SLACK_WEBHOOK_TEST, $SLACK_WEBHOOK_EOLAS
# --- sourced from `.env` file in Zsh path

# Parameters:
# --- $1 = Slack channel,
# --- $2 = type 'error' | 'success'
# --- $3 = Message
# --- $4 = (Opt) Error details
# --- $5 = (Opt) Error source

# Usage:
# --- ./slack_notifier.sh test 'SUCCESS: It worked'
# --- ./slack_notifier.sh test 'ERROR: Something went wrong' 'Error message'

declare -A CHANNEL_TO_WEBHOOK
CHANNEL_TO_WEBHOOK["test"]=$SLACK_WEBHOOK_TEST
CHANNEL_TO_WEBHOOK["backups"]=$SLACK_WEBHOOK_BACKUPS
CHANNEL_TO_WEBHOOK["eolas"]=$SLACK_WEBHOOK_EOLAS
CHANNEL_TO_WEBHOOK["website"]=$SLACK_WEBHOOK_SYSTEMS_OBSCURE
CHANNEL_TO_WEBHOOK["time-tracking"]=$SLACK_WEBHOOK_TIME_TRACKING

WEBHOOK=${CHANNEL_TO_WEBHOOK[$1]}

ERROR_BLOCKS=$(
	jq -n \
		--arg channel "$1" \
		--arg message "$3" \
		--arg details "$4" \
		--arg source "$5" \
		'{
			channel: $channel,
			blocks: ([
			{
				type: "section",
					text: {
						type: "plain_text",
						text: "🔴" + $message 
					}
				},
				{
					type: "section",
					text: {
						type: "mrkdwn",
						text: "```\n\($details)\n```"
					}
				},
				{
					"type": "context",
					"elements": [
						{
							"type": "plain_text",
							text: $source
						}
					]
				}
			])
	}'
)

# Initialise sound playback
mpv --volume=0 --start=0 --length=0.1 /home/thomas/dotfiles/gruvbox-95/sounds/st-computer-on.mp3
sleep 1

# Process notification
if [ "$2" != "error" ]; then
	curl -X POST \
		-H 'Content-type: application/json' \
		--data '{"text":"🟢 '"$3"'"}' \
		"$WEBHOOK"
	mpv --volume=100 /home/thomas/dotfiles/sounds/star-trek-computer-success.mp3
else
	curl -X POST \
		-H 'Content-type: application/json' \
		--json "$ERROR_BLOCKS" \
		"$WEBHOOK"
	mpv --volume=100 /home/thomas/dotfiles/sounds/star-trek-computer-error.mp3
fi
