# local_test_wuzapi.rb

# 1. Mock do Client para não fazer requisição real, apenas imprimir o que seria enviado
module Wuzapi
  class Client
    def request(method, path, payload, headers)
      puts "\n--- [SIMULAÇÃO DE ENVIO] ---"
      puts "Method: #{method.upcase}"
      puts "Path: #{path}"
      puts "Payload: #{JSON.pretty_generate(payload)}"
      puts "Headers: #{headers}"
      puts "--------------------------\n"

      # Retorna falso sucesso só para o script continuar
      { 'success' => true }
    end
  end
end

# 2. Setup do cenário
# Precisamos de um Channel::Whatsapp e Inbox para o teste
# Se não existir, criamos em memória (mas o find precisa achar)

puts 'Procurando uma Inbox de Whatsapp para teste...'
inbox = Inbox.where(channel_type: 'Channel::Whatsapp').last

unless inbox
  puts 'Nenhuma inbox de Whatsapp encontrada no banco local.'
  puts 'Criando uma em memória para teste...'

  # Mockando comportamentos necessários se não tiver banco real
  account = Account.first || Account.create!(name: 'Test Account')
  channel = Channel::Whatsapp.new(phone_number: '+5511999999999', account: account)
  channel.save!(validate: false)
  inbox = Inbox.create!(channel: channel, account: account, name: 'Test Inbox')
end

puts "Usando Inbox ##{inbox.id} com telefone #{inbox.channel.phone_number}"

# 3. Executando o teste
puts "\nTestando Wuzapi::ProvisioningService..."

# Instancia o serviço com URL fake
service = Wuzapi::ProvisioningService.new('http://api.wuzapi.test', 'admin_token')

# Executa setup_webhook
# Isso deve chamar o nosso Client mockado e imprimir o payload com os eventos corretos e a URL certa
begin
  service.setup_webhook('user_token_123', inbox.id, 'webhook_secret_abc')
  puts "\n[SUCESSO] Teste concluído. Verifique se o Payload acima contém:"
  puts "1. 'events' => ['Message', 'ReadReceipt', ...]"
  puts "2. 'webhook' => '.../webhooks/whatsapp/#{inbox.channel.phone_number.delete('+')}'"
rescue StandardError => e
  puts "\n[ERRO] Ocorreu um erro durante o teste: #{e.message}"
  puts e.backtrace
end
