# app/services/notificacao/formatador.rb
#
# Formatação dos valores que entram numa mensagem. Existe porque o mesmo `moeda`
# estava copiado em `Notificacao::Gatilhos` e em `NotificacaoService` — e agora o
# catálogo de variáveis também precisa dele, o que faria três cópias.
#
# Métodos de módulo (sem estado): é chamado de model, job, service e view.
module Notificacao
  module Formatador
    module_function

    # R$ 1.234,56 — separador de milhar incluído (o `number_to_currency` do Rails
    # depende de locale carregado, e isto roda também dentro de job).
    def moeda(valor)
      inteiro, decimais = format('%.2f', valor.to_f).split('.')
      inteiro = inteiro.reverse.gsub(/(\d{3})(?=\d)/, '\1.').reverse
      "R$ #{inteiro},#{decimais}"
    end

    def periodo(inicio, fim)
      return '' if inicio.blank? || fim.blank?

      "#{inicio.to_date.strftime('%d/%m/%Y')} a #{fim.to_date.strftime('%d/%m/%Y')}"
    end

    # Números grandes ficam ilegíveis sem separador numa mensagem de WhatsApp.
    def numero(valor)
      valor.to_i.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\1.').reverse
    end
  end
end
