#!/usr/bin/env bash

# Positional parameters passed to this script by Matterhorn:
mentioned="${1?}"
sender="${2?}"
message="${3?}"

# Script options

# notify_URGENCIES
#
# The first word is the urgency for items where you are not mentioned.
# The second word is the urgency for items where you are mentioned.
# Use "none" to not be notified; otherwise use "low", "normal", or
# "critical".
notify_URGENCIES="normal critical"

# The desktop notification category
notify_CATEGORY="im.received"

# Notification header
notify_HEAD="Message from $sender"

# Notification APP
notify_APPNAME="Matterhorn"

# Escape backslashes in the message
message="${message//\\/\\\\}"

# Escape double quotes in the message
message="${message//\"/\\\"}"

# Notification body
notify_BODY="$message"

getUrgencyHelper() {
  if [ "$mentioned" == "1" ]
  then
    echo "$1"
  else
    if [ "$mentioned" == "2" ]
    then
      echo "$2"
    else
      echo "Error: mentioned value '$mentioned' unexpected" > /dev/stderr
      exit 1
    fi
  fi
}

getUrgency() {
  # We are using arguments as a poor man's bash array for portability
  # shellcheck disable=SC2086
  getUrgencyHelper $notify_URGENCIES
}

urgency=$(getUrgency)

if [ -n "$urgency" ]
then
  test "$urgency" = "none" ||
    notify-send --urgency "$urgency" \
                --category "$notify_CATEGORY" \
                --app-name "$notify_APPNAME" \
                -- "$notify_HEAD" "$notify_BODY"

  mpv "/usr/share/sounds/freedesktop/stereo/message.oga" >/dev/null 2>&1 &
  mpv "/usr/share/sounds/freedesktop/stereo/message-new-instant.oga" >/dev/null 2>&1 &
fi
