class Contabilidade::IrrfPessoaFisica < ApplicationRecord
	has_paper_trail

	belongs_to :imposto_de_renda, required: true

	validates_presence_of :imposto_de_renda_id, :limite_da_faixa

	validates_uniqueness_of :limite_da_faixa, scope: :imposto_de_renda_id

	validates_numericality_of :limite_da_faixa, greater_than: 0, allow_nil: true
	validates_numericality_of :parcela_a_deduzir, greater_than: 0, allow_nil: true
	validates_numericality_of :aliquota, greater_than: 0, less_than: 100, allow_nil: true

	def descricao_para_retencao
		return base_de_calculo
	end

	def base_de_calculo
		ulfmq = ultimo_limite_de_faixa_menor_que
		plfmq = primeiro_limite_de_faixa_maior_que

		if ulfmq.eql?(0.0)
			return "Até #{limite_da_faixa.to_f.real_contabil}"
		elsif limite_da_faixa.to_f.eql?(9999999999.0)
			return "Acima de #{ulfmq.real_contabil}"
		else
			return "De #{(ulfmq + 0.01).real_contabil} até #{limite_da_faixa.to_f.real_contabil}"
		end
	end

	private
	def ultimo_limite_de_faixa_menor_que
		aliquota = Contabilidade::IrrfPessoaFisica.where('imposto_de_renda_id = ? and limite_da_faixa < ?', imposto_de_renda_id, limite_da_faixa.to_f).order(:limite_da_faixa).last
		return aliquota.try(:limite_da_faixa).to_f
	end

	def primeiro_limite_de_faixa_maior_que
		aliquota = Contabilidade::IrrfPessoaFisica.where('imposto_de_renda_id = ? and limite_da_faixa > ?', imposto_de_renda_id, limite_da_faixa.to_f).order(:limite_da_faixa).first
		return aliquota.try(:limite_da_faixa).to_f
	end
end
