# Log de cada mensagem disparada — quem recebeu, por qual canal, com que texto e
# se deu certo.
#
# Hoje uma falha de envio só vira linha no log do Rails (NotificacaoService
# engole a exceção de propósito, para um SMTP fora do ar não travar o
# fechamento). Isso é certo, mas deixa o operador sem resposta para "o motorista
# recebeu?". Com o WhatsApp por sessão QR — que cai sozinho e precisa
# repareamento — essa pergunta passa a ser rotina.
class CreateNotificacaoEnvios < ActiveRecord::Migration[7.1]
  def change
    create_table :notificacao_envios do |t|
      # ⚠️ `to_table:` é OBRIGATÓRIO aqui. Com `foreign_key: true` o Rails
      # PLURALIZA o nome da referência para achar a tabela alvo, e o Inflector
      # não fala português: `grupo_contato` → "grupo_contatos" e
      # `evento_notificacao` → "evento_notificacaos". As tabelas reais são
      # `grupos_contato` e `eventos_notificacao` (plural no primeiro termo).
      t.references :evento_notificacao, foreign_key: { to_table: :eventos_notificacao }, index: true
      t.references :contato,            foreign_key: true, index: true
      t.references :user,               foreign_key: true, index: true

      t.string  :canal,   null: false            # whatsapp | email
      t.string  :destino, null: false            # telefone E.164 ou e-mail
      t.string  :assunto
      t.text    :corpo
      t.string  :status,  null: false, default: 'pendente' # pendente|enviado|falhou
      t.text    :erro
      t.integer :tentativas, null: false, default: 0
      t.datetime :enviado_em

      t.timestamps
    end

    add_index :notificacao_envios, %i[status created_at]
    add_index :notificacao_envios, :created_at
  end
end
