#!/usr/bin/env bash
set -Euo pipefail
log() {
  printf '%s\n' "$*" | systemd-cat -t hermes-stack-maintenance 2>/dev/null || true
}
[[ -n "${*:-}" ]] || exit 2
CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/hermes-stack-maintenance/config.env"
if [[ ! -r "$CONFIG_FILE" ]]; then
  log "$*"
  log "Benachrichtigung übersprungen: Maintenance-Konfiguration nicht lesbar."
  exit 0
fi
# shellcheck disable=SC1090
source "$CONFIG_FILE" || { log "$*"; exit 0; }

notify_user() {
  local text="$1"
 local telegram_notify="${TELEGRAM_NOTIFY:-0}"
 local signal_notify="${SIGNAL_NOTIFY:-0}"
 local signal_payload
  log "$text"

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

 if [[ "$telegram_notify" == "1" &&
       -n "${TELEGRAM_BOT_TOKEN:-}" &&
       -n "${TELEGRAM_HOME_CHANNEL:-}" ]]; then
   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 || true
 fi

 if [[ "$signal_notify" == "1" &&
       -n "${SIGNAL_HTTP_URL:-}" &&
       -n "${SIGNAL_ACCOUNT:-}" &&
       -n "${SIGNAL_HOME_CHANNEL:-}" ]]; then
   if [[ "$SIGNAL_HOME_CHANNEL" == group:* ]]; then
     if ! 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"}'
     )"; then
       log "Signal-Benachrichtigung konnte nicht vorbereitet werden."
       return 0
     fi
   else
     if ! 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"}'
     )"; then
       log "Signal-Benachrichtigung konnte nicht vorbereitet werden."
       return 0
     fi
   fi

   if ! 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
}

notify_user "$*" || true
exit 0
