class Contabilidade::ImpostoDeRenda < ApplicationRecord
	has_paper_trail

	has_many :irrfs_pessoas_fisicas, dependent: :destroy

	validates_presence_of :mes_de_competencia, :ano_de_referencia, :inicio_de_vigencia

	validates_numericality_of :desconto_por_dependente, allow_nil: true
	validates_numericality_of :ano_de_referencia, only_integer: true
	
	after_save :adiciona_fim_da_gestao_ao_imposto

	after_destroy :remove_fim_da_gestao_ao_imposto

	validates_length_of :ano_de_referencia, is: 4

	enum mes_de_competencia: {
		janeiro: 1,
		fevereiro: 2,
		março: 3,
		abril: 4,
		maio: 5,
		junho: 6,
		julho: 7,
		agosto: 8,
		setembro: 9,
		outubro: 10,
		novembro: 11,
		dezembro: 12
	}

	def competencia
		return "#{mes_de_competencia.capitalize} de #{ano_de_referencia}"
	end

	def adiciona_fim_da_gestao_ao_imposto
		imposto_ant_sem_fim_de_vig = Contabilidade::ImpostoDeRenda.where('fim_de_vigencia IS NULL AND ID <> ?', self.id).last
		imposto_ant_sem_fim_de_vig.update_column(:fim_de_vigencia, self.inicio_de_vigencia.to_date - 1.day) if imposto_ant_sem_fim_de_vig.present?
	end

	def remove_fim_da_gestao_ao_imposto
		novo_imposto_atual = Contabilidade::ImpostoDeRenda.find_by('((inicio_de_vigencia <=  ? AND fim_de_vigencia >= ?) OR (inicio_de_vigencia <=  ? AND fim_de_vigencia IS NULL))', Date.today, Date.today, Date.today)
		novo_imposto_atual.update_column(:fim_de_vigencia, nil) if novo_imposto_atual.present?
	end

end

