#!/bin/bash
# Evolution API — Configura webhook e/ou settings de uma instância
# Uso: bash scripts/evolution-config.sh <nome> [opções]
# Opções:
#   --webhook-url <url>     Altera URL do webhook (padrão: http://177.153.38.26:9999/webhook)
#   --webhook-off           Desabilita webhook
#   --always-online <on|off>
#   --read-msgs <on|off>
#   --read-status <on|off>
#   --reject-call <on|off>
#   --sync-history <on|off>
#   --show                  Mostra configurações atuais da instância
#
# Exemplos:
#   bash scripts/evolution-config.sh teste --always-online on --read-msgs on
#   bash scripts/evolution-config.sh teste --webhook-url "http://meuip:9999/webhook"
#   bash scripts/evolution-config.sh teste --show

API_URL="http://177.153.38.26:8080"
API_KEY="429683C4C977415CAAFCCE10F7D57E11"
NAME="${1:-teste}"
shift 2>/dev/null

# Defaults — mantém o valor atual se não informado
ALWAYS_ONLINE=""
READ_MSGS=""
READ_STATUS=""
REJECT_CALL=""
GROUPS_IGNORE=""
SYNC_HISTORY=""
WEBHOOK_URL="http://177.153.38.26:9999/webhook"
WEBHOOK_ENABLED=""
SET_WEBHOOK=false
SHOW=false

while [ $# -gt 0 ]; do
  case "$1" in
    --show) SHOW=true ;;
    --webhook-url) WEBHOOK_URL="$2"; SET_WEBHOOK=true; shift ;;
    --webhook-off) WEBHOOK_ENABLED=false; SET_WEBHOOK=true ;;
    --always-online) ALWAYS_ONLINE=$( [ "$2" = "on" ] && echo true || echo false ); shift ;;
    --read-msgs) READ_MSGS=$( [ "$2" = "on" ] && echo true || echo false ); shift ;;
    --read-status) READ_STATUS=$( [ "$2" = "on" ] && echo true || echo false ); shift ;;
    --reject-call) REJECT_CALL=$( [ "$2" = "on" ] && echo true || echo false ); shift ;;
    --sync-history) SYNC_HISTORY=$( [ "$2" = "on" ] && echo true || echo false ); shift ;;
    *) echo "❌ Opção desconhecida: $1"; exit 1 ;;
  esac
  shift
done

# --- Show ---
if $SHOW; then
  echo "📋 Dados da instância '$NAME':"
  curl -sf "$API_URL/instance/fetchInstances" -H "apikey: $API_KEY" \
    | jq '.[] | select(.name=="'"$NAME"'") | {name, connectionStatus, owner: .ownerJid, settings: .Setting}'
  echo ""
  webhook=$(curl -sf "$API_URL/webhook/find/$NAME" -H "apikey: $API_KEY" 2>/dev/null)
  if [ -n "$webhook" ]; then
    echo "📡 Webhook:"
    echo "$webhook" | jq .
  else
    echo "📡 Webhook: (não encontrado — endpoint find não disponível)"
  fi
  exit 0
fi

# --- Configurar Settings ---
if [ -n "$ALWAYS_ONLINE" ] || [ -n "$READ_MSGS" ] || [ -n "$READ_STATUS" ] || [ -n "$REJECT_CALL" ] || [ -n "$SYNC_HISTORY" ]; then
  body=$(jq -n --argjson ao "${ALWAYS_ONLINE:-null}" --argjson rm "${READ_MSGS:-null}" \
    --argjson rs "${READ_STATUS:-null}" --argjson rc "${REJECT_CALL:-null}" \
    --argjson sh "${SYNC_HISTORY:-null}" \
    '{$ao, $rm, $rs, $rc, $sh} | with_entries(select(.value != null))')

  echo "⚙️  Atualizando settings da '$NAME'..."
  curl -s -X POST "$API_URL/settings/set/$NAME" \
    -H "apikey: $API_KEY" \
    -H "Content-Type: application/json" \
    -d "$body" | jq .
fi

# --- Configurar Webhook ---
if $SET_WEBHOOK; then
  enabled=${WEBHOOK_ENABLED:-true}
  echo "📡 Configurando webhook da '$NAME' -> $WEBHOOK_URL (enabled: $enabled)..."
  curl -s -X POST "$API_URL/webhook/set/$NAME" \
    -H "apikey: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "webhook": {
        "url": "'"$WEBHOOK_URL"'",
        "enabled": '"$enabled"',
        "events": [
          "APPLICATION_STARTUP",
          "MESSAGES_UPSERT",
          "MESSAGES_SET",
          "MESSAGES_DELETE",
          "SEND_MESSAGE",
          "CONNECTION_UPDATE",
          "QRCODE_UPDATED",
          "CALL"
        ]
      }
    }' | jq .
fi

if ! $SET_WEBHOOK && [ -z "$ALWAYS_ONLINE" ] && [ -z "$READ_MSGS" ] && [ -z "$READ_STATUS" ] && [ -z "$REJECT_CALL" ] && [ -z "$SYNC_HISTORY" ]; then
  echo "⚠️  Nenhuma opção informada. Usa --help pra ver os comandos."
  echo "    bash $0 $NAME --show  pra ver configs atuais"
fi
