# app/services/notificacao/resultado.rb
#
# Retorno dos testes de envio. Existe para o controller não precisar saber nada
# sobre SMTP nem sobre a API do Twilio — só perguntar `ok?` e jogar no flash.
module Notificacao
  Resultado = Struct.new(:ok, :mensagem, :detalhe, keyword_init: true) do
    def self.sucesso(mensagem)
      new(ok: true, mensagem: mensagem)
    end

    def self.falha(mensagem, detalhe = nil)
      new(ok: false, mensagem: mensagem, detalhe: detalhe)
    end

    def ok?
      !!ok
    end

    # O detalhe técnico (mensagem crua do servidor/Twilio) só aparece no erro —
    # é o que permite ao admin resolver sozinho sem abrir o log do container.
    def para_flash
      texto = mensagem.to_s
      texto += " [detalhe técnico: #{detalhe.to_s.truncate(180)}]" if !ok? && detalhe.present?
      { ok? ? :notice : :alert => texto }
    end
  end
end
