#!/usr/bin/env bash
set -Euo pipefail

CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/hermes-stack-maintenance/config.env"

log() {
  printf '%s\n' "$*" | systemd-cat -t hermes-stack-maintenance 2>/dev/null || true
}

text="${*:-}"
if [[ -z "$text" ]]; then
  printf 'Verwendung: %s TEXT\n' "${0##*/}" >&2
  exit 2
fi

log "$text"

if [[ ! -r "$CONFIG_FILE" ]]; then
  log "Benachrichtigung übersprungen: $CONFIG_FILE ist nicht lesbar."
  exit 0
fi

set +u
# shellcheck disable=SC1090
source "$CONFIG_FILE" || {
  set -u
  log "Benachrichtigung übersprungen: Maintenance-Konfiguration ist ungültig."
  exit 0
}

telegram_notify="${TELEGRAM_NOTIFY:-0}"
signal_notify="${SIGNAL_NOTIFY:-0}"

if [[ -r "${HERMES_ENV:-}" ]] &&
   [[ "$telegram_notify" == 1 || "$signal_notify" == 1 ]]; then
  set -a
  # shellcheck disable=SC1090
  source "$HERMES_ENV" || true
  set +a
fi
set -u

if [[ "$telegram_notify" == 1 &&
      -n "${TELEGRAM_BOT_TOKEN:-}" &&
      -n "${TELEGRAM_HOME_CHANNEL:-}" ]]; then
  if ! curl --fail --silent --show-error --max-time 15 \
       --request POST \
       "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
       --data-urlencode "chat_id=${TELEGRAM_HOME_CHANNEL}" \
       --data-urlencode "text=${text}" >/dev/null; then
    log "Telegram-Benachrichtigung konnte nicht zugestellt werden."
  fi
fi

if [[ "$signal_notify" == 1 &&
      -n "${SIGNAL_HTTP_URL:-}" &&
      -n "${SIGNAL_ACCOUNT:-}" &&
      -n "${SIGNAL_HOME_CHANNEL:-}" ]]; then
  if [[ "$SIGNAL_HOME_CHANNEL" == group:* ]]; then
    signal_payload="$(
      jq -nc --arg account "$SIGNAL_ACCOUNT" --arg message "$text" \
        --arg group_id "${SIGNAL_HOME_CHANNEL#group:}" \
        '{jsonrpc:"2.0",method:"send",params:{account:$account,message:$message,groupId:$group_id},id:"hermes-maintenance"}'
    )" || signal_payload=""
  else
    signal_payload="$(
      jq -nc --arg account "$SIGNAL_ACCOUNT" --arg message "$text" \
        --arg recipient "$SIGNAL_HOME_CHANNEL" \
        '{jsonrpc:"2.0",method:"send",params:{account:$account,message:$message,recipient:[$recipient]},id:"hermes-maintenance"}'
    )" || signal_payload=""
  fi

  if [[ -z "$signal_payload" ]] ||
     ! curl --fail --silent --show-error --max-time 30 \
         --header 'Content-Type: application/json' \
         --data-binary "$signal_payload" \
         "${SIGNAL_HTTP_URL%/}/api/v1/rpc" |
       jq -e '((.error // null) == null) and (.result != null)' >/dev/null; then
    log "Signal-Benachrichtigung konnte nicht zugestellt werden."
  fi
fi

exit 0
