class Licitacao::Apostilamento < ApplicationRecord
	include TradutorConcern
	has_paper_trail

	belongs_to :contrato, class_name: 'Licitacao::Contrato'
	belongs_to :orcamento, class_name: 'Orcamento'
	belongs_to :legislacao, class_name: 'Base::Legislacao'
	has_many :documentos_do_apostilamento, class_name: 'Licitacao::DocumentoDoApostilamento', dependent: :destroy
	has_many :orcamentos_da_despesa_do_apostilamento, class_name: 'Licitacao::OrcamentoDaDespesaDoApostilamento', dependent: :destroy
	has_many :orcamentos_da_despesa, through: :orcamentos_da_despesa_do_apostilamento
	has_many :itens_do_apostilamento, class_name: 'Licitacao::ItemDoApostilamento'

	validate :item_do_apostilamento_nao_pode_ser_repetido

	accepts_nested_attributes_for :itens_do_apostilamento, reject_if: Proc.new{ |atributo| atributo['preco_unitario'].blank? } , allow_destroy: true

	validates_presence_of :data_apostilamento, :modalidade, :legislacao_id, :contrato_id, :orcamento_id

	enum modalidade: {
		outros: 0,
		dotacao: 1,
		acrescimo: 2,
		reducao: 3
	}

	def saldo_dotacoes
		(contrato.valor_do_contrato - orcamentos_da_despesa_do_apostilamento.sum(:valor)).to_f
	end

	def item_do_apostilamento_nao_pode_ser_repetido
		itens_do_contrato_ids = self.itens_do_apostilamento.reject(&:marked_for_destruction?).map{ |i| i.item_do_contrato_id }.compact
		if itens_do_contrato_ids.detect { |id| itens_do_contrato_ids.count(id) > 1 }.present?
			errors.add(:base, "Não pode existir itens duplicados")
		end
	end

end
