class Comunicacao::Mensagem < ApplicationRecord
	has_paper_trail

	has_many :mensagens_do_usuario
	attr_accessor :usuarios
	attr_accessor :email
	attr_accessor :deliver_now

	validates_presence_of :titulo, :conteudo
	validate :possui_usuarios_ou_email, on: :create

	after_create :enviar_mensagem

	def possui_usuarios_ou_email
		self.email.present? || self.usuarios.present?
	end

	def enviar_mensagem
		configuracao = Configuracao.last
		if configuracao.present? && configuracao.permite_envio_de_email?
			if usuarios.present?
				if usuarios.kind_of?(Array) && usuarios.any?
					usuarios.each do |usuario|
						mensagens_do_usuario.create(usuario: usuario)
						unless Rails.env.test?
							if usuario.receber_email?
								mensagem_mailer = MensagemMailer.enviar_mensagem_para_usuario(titulo, conteudo, usuario.id)
								deliver_message(mensagem_mailer)
							end
						end
					end
				else
					mensagens_do_usuario.create(usuario: usuarios)
				end
			elsif email.present?
				unless Rails.env.test?
					mensagem_mailer = MensagemMailer.enviar_mensagem_para_email(titulo, conteudo, email)
					deliver_message(mensagem_mailer)
				end
			end
		end
	end

	def deliver_message mensagem_mailer
		unless Rails.env.development? || Rails.env.test?
			if deliver_now.present? && deliver_now == true
				mensagem_mailer.deliver_now
			else
				mensagem_mailer.deliver_later(wait: 1.minute)
			end
		end
	end
end
