class EnviarEmailsDeAtasEncerradasJob < ActiveJob::Base
	queue_as :default

	def perform(*args)
		puts "==="
		puts "Iniciando - Envio de Email sobre Atas Encerradas"
		if Configuracao.first.permite_enviar_alertas
			atas_validas = Licitacao::AtaDeRegistroDePrecos.where("data_final_de_vigencia = :ontem AND status = :confirmado", ontem: Date.today-1.day, confirmado: Licitacao::AtaDeRegistroDePrecos.status[:confirmado]).distinct.order(:data_final_de_vigencia)
			if atas_validas.count > 0
				puts "Há #{atas_validas.count} atas válidas para o job. Iniciando busca por usuários"
				usuarios_e_atas = Hash.new
				atas_validas.each do |ata|
					ata.unidades_orcamentarias.each do |unidade_orcamentaria|
						unidade_orcamentaria.usuarios.where(receber_email: true).each do |usuario|
							if !usuario.nil?
								if !usuarios_e_atas.has_key?(usuario.id)
									usuarios_e_atas[usuario.id] = Set.new
								end
							end
							if !usuarios_e_atas[usuario.id].include?({id: ata.id, numero: ata.numero})
								usuarios_e_atas[usuario.id] << {id: ata.id, numero: ata.numero}
							end
						end
					end
				end
				if usuarios_e_atas.count > 0
					puts "Preparando envio de e-mail para #{usuarios_e_atas.count} usuário(s)"
					usuarios_e_atas.each do |usuario_id, correspondencias|
						titulo = "Há uma ou mais Atas de Registro de Preço que tiveram vigência encerrada"
						conteudo = "<p>O sistema detectou que há uma ou mais Atas de Registro de Preço que tiveram vigência encerrada ontem<p>"
						conteudo += "<ul>"
						correspondencias.each do |ata|
							unless ata.blank?
								conteudo += "<li><a href='#{url_aplicacao}/licitacao/atas_de_registro_de_precos/#{ata[:id].to_s}' target='_blank'>#{ ata[:numero].to_s }</a></li>"
							end
						end
						conteudo += "</ul>"
						Comunicacao::Mensagem.create(titulo: titulo, conteudo: conteudo, usuarios: Usuario.where(id: usuario_id).to_a, deliver_now: true)
					end
				else
					puts "Há #{atas_validas.count} atas encerradas ontem, mas nenhum usuário que as receba. Encerrando..."
				end
			else
				puts "Nenhuma ata encerrou ontem"
			end
		else
			puts "Sistema setado para não enviar alertas. Encerrando..."
		end
		puts "Concluindo - Envio de Email sobre Atas Encerradas"
	end

	def url_aplicacao
		municipio = ENV["municipio"].blank? ? "" : "/#{ENV['municipio']}"
		host = ENV["host"].blank? ? "" : "#{ENV['host']}"
		host + municipio
	end

end