# Cria os eventos de sistema dos gatilhos ligados na etapa 3.
#
# Sem isso, `Despachante.disparar(chave: 'valor_alterado')` não acharia evento
# nenhum e o gatilho ficaria mudo — e o ADM teria de adivinhar que precisa criar
# um evento cujo nome gere exatamente aquela `chave`.
#
# Nascem ATIVOS e isso é seguro: sem grupo assinante não há destinatário, então
# nada é enviado até o ADM marcar um grupo na tela.
class SemearEventosDeGatilho < ActiveRecord::Migration[7.1]
  EVENTOS = [
    ['Valor alterado no fechamento', 'valor_alterado', 'valor_alterado',
     'Disparado quando o valor de um motorista muda depois da consolidação finalizada.'],
    ['Dados da operação mudaram', 'operacao_alterada', 'operacao_alterada',
     'NF que entrou ou saiu, entrega que trocou de status, lançamento corrigido no SimpliRoute.']
  ].freeze

  def up
    EVENTOS.each do |nome, chave, gatilho, descricao|
      # Idempotente: rodar de novo (ou num banco que já tenha o evento criado à
      # mão) não pode estourar índice único.
      next if select_value("SELECT 1 FROM eventos_notificacao WHERE chave = #{quote(chave)}")

      execute(<<~SQL.squish)
        INSERT INTO eventos_notificacao
          (nome, chave, gatilho, descricao, ativo, sistema, notificar_envolvido, hora, created_at, updated_at)
        VALUES (#{quote(nome)}, #{quote(chave)}, #{quote(gatilho)}, #{quote(descricao)},
                true, true, true, 8, NOW(), NOW())
      SQL
    end
  end

  def down
    EVENTOS.each { |_, chave, _, _| execute("DELETE FROM eventos_notificacao WHERE chave = #{quote(chave)}") }
  end
end
