<% input = 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white placeholder-gray-600 focus:outline-none focus:border-[#f97316] focus:ring-1 focus:ring-[#f97316] transition-colors text-sm' pill = 'inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-bold' %>

<%= icone :diario, espaco: false %> Eventos de notificação

O que dispara mensagem e para quais grupos. Você cria quantos eventos quiser — o gatilho sai de uma lista fixa, porque gatilho é código.

<%= link_to new_admin_evento_path, data: { turbo: false }, class: 'inline-flex items-center gap-2 px-5 py-3 bg-[#f97316] hover:bg-orange-500 text-white font-semibold rounded-xl transition-colors min-h-[48px] whitespace-nowrap' do %> <%= icone :adicionar, cor: nil, tamanho: 'w-5 h-5', espaco: false %> Novo evento <% end %>
<%= render 'shared/flash' %>
<% @eventos.each do |evento| %> <%# Evento desativado fica esmaecido: a lista mistura ativo e inativo e sem isso os dois pesam igual na varredura visual. %>

<%= evento.nome %>

<%= evento.gatilho_label %> <% if evento.sistema? %> sistema <% end %> <% unless evento.ativo? %> desativado <% end %>

<%= evento.descricao.presence || '—' %>

<% assinantes = evento.assinaturas.select(&:ativo) %> <% if assinantes.any? %>
Grupos <% assinantes.each do |a| %> <%= a.grupo_contato.nome %> · <%= a.canal_label %> <% end %>
<% else %>

<%= icone :alerta, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false %> Nenhum grupo assina — este evento não manda nada.

<% end %> <% if evento.agendado? %>

<%= icone :relogio, cor: 'text-gray-500', tamanho: 'w-3.5 h-3.5', espaco: false %> <%= evento.frequencia == 'semanal' ? "Toda #{Date::DAYNAMES[evento.dia_semana.to_i]}" : 'Todo dia' %> às <%= format('%02d:00', evento.hora.to_i) %>

<% end %>
<%# Ações: editor de mensagem por canal + editar/excluir %>
<%# O ✓ diz se já existe mensagem montada — sem ela o evento usa o texto padrão do sistema. %> <% %w[whatsapp email].each do |canal| %> <% montado = evento.template_utilizavel(canal).present? %> <%= link_to template_admin_evento_path(evento, canal: canal), data: { turbo: false }, title: montado ? 'Mensagem montada no editor' : 'Sem mensagem — usa o texto padrão', class: "inline-flex items-center gap-1.5 px-3 py-2 rounded-xl text-sm border transition-colors #{ montado ? 'bg-green-500/10 border-green-500/30 text-green-300 hover:border-green-500' : 'bg-[#0a0a0a] border-white/10 text-gray-400 hover:border-[#f97316] hover:text-white'}" do %> <%= icone(montado ? :sucesso : (canal == 'email' ? :email : :telefone), cor: nil, tamanho: 'w-4 h-4', espaco: false) %> <%= canal == 'email' ? 'E-mail' : 'WhatsApp' %> <% end %> <% end %>
<%= link_to edit_admin_evento_path(evento), data: { turbo: false }, class: 'p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded-lg transition-colors', title: 'Editar' do %> <%= icone :editar, cor: nil, tamanho: 'w-4 h-4', espaco: false %> <% end %> <% if evento.apagavel? %> <%= button_to admin_evento_path(evento), method: :delete, class: 'p-2 text-gray-600 hover:text-red-400 hover:bg-red-900/20 rounded-lg transition-colors', title: 'Excluir', form: { data: { turbo_confirm: "Excluir o evento #{evento.nome}?" } } do %> <%= icone :excluir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> <% end %> <% end %>
<%# Disparo manual: manda mensagem DE VERDADE. %> <% if evento.manual? && evento.ativo? %>
<%= icone :expandir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> Disparar agora <% com_template = %w[whatsapp email].any? { |c| evento.template_utilizavel(c) } %> <%= form_with url: disparar_admin_evento_path(evento), method: :post, data: { turbo: false }, class: 'mt-4 space-y-3' do |f| %> <% if com_template %>

<%= icone :sucesso, cor: nil, tamanho: 'w-4 h-4', espaco: false, classe: 'mt-0.5' %> Este evento tem mensagem montada no editor — ela será usada nos canais configurados. O texto abaixo só vale para o canal que ainda não tem mensagem própria.

<% end %> <%= f.text_field :assunto, placeholder: 'Assunto (só e-mail)', value: evento.nome, class: input %> <%= f.text_area :corpo, rows: 4, required: !com_template, class: input, placeholder: com_template ? 'Opcional — só para o canal sem mensagem montada' : 'Mensagem que será enviada…' %> <%= f.submit 'Enviar para os grupos assinantes', data: { turbo_confirm: 'Isso envia mensagem de verdade para todos os contatos dos grupos assinantes. Confirmar?' }, class: 'px-6 py-3 bg-[#f97316] hover:bg-orange-500 text-white font-semibold rounded-xl transition-colors cursor-pointer min-h-[48px]' %> <% end %>
<% end %>
<% end %> <% if @eventos.empty? %>
<%= icone :vazio, tamanho: 'w-10 h-10', cor: 'text-gray-600', espaco: false %>

Nenhum evento cadastrado.

<% end %>