class ApplicationRecord < ActiveRecord::Base
	self.abstract_class = true

	def contexto_atual
		Thread.current[:contexto_atual]
	end

	def self.pesquisa_coluna(nomes)
		lista_de_palavras = self.name.downcase.split("::")
		if nomes.class.name == "Array"
			colunas = []
			nomes.each do |nome|
				colunas << self.column_names.select { |str| str.include?(nome) }
			end
			colunas = colunas.flatten
		else
			colunas = self.column_names.select { |str| str.include?(nomes) }
		end
		if colunas.size > 1
			if nomes.class.name == "Array"
				coluna_encontrada = colunas.grep(/#{nomes.join('|')}/).first
			else
				coluna_encontrada = colunas.grep(/#{nomes}/).first
			end
			if coluna_encontrada.nil? && colunas.size > 0
				coluna_encontrada = colunas.first
			end
		else
			coluna_encontrada = colunas.first
		end

		return coluna_encontrada
	end

	def extrair_data()
		if self.is_a?(Contabilidade::Liquidacao)
			self.data_da_liquidacao || self.data_de_solicitacao
		elsif self.is_a?(Contabilidade::EstornoDeLiquidacao)
			self.data_do_estorno
		elsif self.is_a?(Contabilidade::EstornoDePagamento)
			self.data_do_estorno
		elsif self.is_a?(Contabilidade::Pagamento)
			self.data || self.data_de_solicitacao
		elsif self.is_a? (Contabilidade::RestoAPagarCancelado)
			self.cancelamento_de_resto_a_pagar.data
		elsif self.is_a? (Contabilidade::TalaoDeReceita)
			self.data_do_talao
		elsif self.is_a? (Contabilidade::AnulacaoDoTalaoDeReceita)
			self.data_da_anulacao
		elsif self.is_a? (Contabilidade::Empenho)
			self.data_do_empenho || self.data_de_solicitacao
		elsif self.is_a? (Contabilidade::AnulacaoDoEmpenho)
			self.data_da_anulacao
		else
			nil
		end
	end

	def diferenca_de_tempo_em_palavras(inicio, fim)
		segundos = (fim - inicio).to_i

		minutos = segundos / 60
		horas = minutos / 60
		dias = horas / 24

		segundos %= 60
		minutos %= 60
		horas %= 24

		partes = []
		partes << "#{dias} dia#{'s' if dias > 1}" if dias > 0
		partes << "#{horas} hora#{'s' if horas > 1}" if horas > 0
		partes << "#{minutos} minuto#{'s' if minutos > 1}" if minutos > 0
		partes << "#{segundos} segundo#{'s' if segundos > 1}" if segundos > 0

		partes.to_sentence(last_word_connector: ' e ', two_words_connector: ' e ')
	end
end
