#!/usr/bin/bash

#Support WAHA (WhatsApp HTTP API) - free, self-hosted WhatsApp API
#https://waha.devlike.pro/

#Required:
#WAHA_URL="http://localhost:3000"
#WAHA_CHAT_ID="1234567890@c.us"

#Optional:
#WAHA_API_KEY=""
#WAHA_SESSION="default"

waha_send() {
  _subject="$1"
  _content="$2"
  _statusCode="$3" #0: success, 1: error 2($RENEW_SKIP): skipped
  _debug "_subject" "$_subject"
  _debug "_content" "$_content"
  _debug "_statusCode" "$_statusCode"

  WAHA_URL="${WAHA_URL:-$(_readaccountconf_mutable WAHA_URL)}"
  if [ -z "$WAHA_URL" ]; then
    WAHA_URL=""
    _err "You didn't specify the WAHA server url WAHA_URL yet."
    _err "Example: export WAHA_URL=\"http://localhost:3000\""
    return 1
  fi
  _saveaccountconf_mutable WAHA_URL "$WAHA_URL"

  WAHA_CHAT_ID="${WAHA_CHAT_ID:-$(_readaccountconf_mutable WAHA_CHAT_ID)}"
  if [ -z "$WAHA_CHAT_ID" ]; then
    WAHA_CHAT_ID=""
    _err "You didn't specify the WhatsApp chat id WAHA_CHAT_ID yet."
    _err "Example: export WAHA_CHAT_ID=\"1234567890@c.us\""
    return 1
  fi
  _saveaccountconf_mutable WAHA_CHAT_ID "$WAHA_CHAT_ID"

  WAHA_API_KEY="${WAHA_API_KEY:-$(_readaccountconf_mutable WAHA_API_KEY)}"
  if [ "$WAHA_API_KEY" ]; then
    _saveaccountconf_mutable WAHA_API_KEY "$WAHA_API_KEY"
  fi

  WAHA_SESSION="${WAHA_SESSION:-$(_readaccountconf_mutable WAHA_SESSION)}"
  if [ -z "$WAHA_SESSION" ]; then
    WAHA_SESSION="default"
  else
    _saveaccountconf_mutable WAHA_SESSION "$WAHA_SESSION"
  fi

  _content=$(printf "*%s*\n%s" "$_subject" "$_content" | _json_encode)

  _data="{\"chatId\": \"$WAHA_CHAT_ID\", "
  _data="$_data\"text\": \"$_content\", "
  _data="$_data\"session\": \"$WAHA_SESSION\"}"

  _debug "_data" "$_data"

  if [ "$WAHA_API_KEY" ]; then
    export _H1="X-Api-Key: $WAHA_API_KEY"
  fi

  _waha_url="${WAHA_URL}/api/sendText"
  response="$(_post "$_data" "$_waha_url" "" "POST" "application/json")"

  if [ "$?" = "0" ] && _contains "$response" "\"id\""; then
    _info "waha send success."
    return 0
  fi
  _err "waha send error."
  _err "$response"
  return 1
}
