# Corpo das mensagens montado pelo ADM, um template por EVENTO e por CANAL.
#
# Antes, o texto era string interpolada dentro do NotificacaoService: mudar uma
# palavra exigia deploy. Agora o ADM empilha blocos (cabeçalho, texto, tabela de
# valores, aviso, botão, rodapé) na tela.
#
# `blocos` é jsonb e não tabela filha de propósito: a ordem faz parte do dado
# (é uma lista, não um conjunto), o conteúdo de cada tipo de bloco é diferente, e
# salvar o template inteiro numa transação evita estado meio-salvo. A validação
# da forma acontece no model (MensagemTemplate#normalizar_blocos), não no banco.
class CreateMensagemTemplates < ActiveRecord::Migration[7.1]
  def change
    create_table :mensagem_templates 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, null: false, foreign_key: { to_table: :eventos_notificacao }

      t.string  :canal,   null: false             # whatsapp | email
      t.string  :assunto                          # só e-mail
      t.jsonb   :blocos,  null: false, default: []
      t.boolean :ativo,   null: false, default: true

      t.timestamps
    end

    # Um template por evento+canal: dois templates ativos para o mesmo par
    # deixariam o envio escolhendo em silêncio.
    add_index :mensagem_templates, %i[evento_notificacao_id canal],
              unique: true, name: 'index_template_evento_canal_unico'
  end
end
