class Licitacao::ItemDoAditivoDaAta < ApplicationRecord
	has_paper_trail

	attr_accessor :quantidade_saldo
	attr_accessor :valor_atualizado

	belongs_to :item_do_lote, class_name: 'Licitacao::ItemDoLote', required: true
	belongs_to :aditivo_da_ata, class_name: 'Licitacao::AditivoDaAta', required: true

	delegate :ata_de_registro_de_precos, to: :aditivo_da_ata
	delegate :item, to: :item_do_lote

	validates_presence_of :item_do_lote_id, :aditivo_da_ata_id

	validates_numericality_of :quantidade, greater_than_or_equal_to: 0, allow_nil: true
	validates_numericality_of :valor_adicionado, greater_than_or_equal_to: 0, allow_nil: true
	validate :valida_quantidade_dos_itens_nos_aditivos_de_reajuste
	validate :valida_valor_do_reajuste_de_decrescimo, if: Proc.new { aditivo_da_ata && aditivo_da_ata.reajuste_de_valor_decrescimo? }

	after_save :apaga_a_si_mesmo_se_quantidade_for_zero_ou_nula
	after_save :apaga_a_si_mesmo_se_valor_adicionado_for_zero_ou_nulo, if: Proc.new { aditivo_da_ata && (aditivo_da_ata.reajuste_de_valor_acrescimo? || aditivo_da_ata.reajuste_de_valor_decrescimo?)}


	def quantidade_permitida
		ata_de_registro_de_precos.itens_da_ata.find_by_item_do_lote_id(item_do_lote).saldo
	end

	def valor_do_item
		item_do_lote.preco_unitario.to_f
	end

	def valor_total
		valor_adicionado * quantidade
	end

	def valida_quantidade_dos_itens_nos_aditivos_de_reajuste
		if self.quantidade && (self.quantidade > quantidade_permitida) && !item_do_lote.item_do_pedido.por_desconto?
			errors.add(:quantidade, "Não pode ser maior que o limite disponível")
		end
	end

	def valida_valor_do_reajuste_de_decrescimo
		# Valor não pode ser maior que o valor unitário do item senão fica negativo
		if self.valor_adicionado && (self.valor_adicionado > valor_do_item)
			errors.add(:valor_adicionado, "Não pode ser maior que o valor unitário do item")
		end
	end

	def apaga_a_si_mesmo_se_quantidade_for_zero_ou_nula
		self.delete if self.quantidade == 0 || self.quantidade.nil?
	end

	def apaga_a_si_mesmo_se_valor_adicionado_for_zero_ou_nulo
		self.delete if self.valor_adicionado == 0 || self.valor_adicionado.nil?
	end

	def valor_atualizado_documento
		aditivo_da_ata.reajuste_de_valor_acrescimo? ? valor_do_item + valor_adicionado : valor_do_item - valor_adicionado
	end
end
