class Contabilidade::AcaoDoContigenciamento < ApplicationRecord
	has_paper_trail
	include AASM
	include TradutorConcern

	belongs_to :orcamento_do_contingenciamento, class_name: 'Contabilidade::OrcamentoDoContingenciamento'
	belongs_to :acao, class_name: 'Loa::Acao'

	has_many :elementos_por_acao_do_contigenciamento, class_name: 'Contabilidade::ElementoPorAcaoDoContigenciamento'

	accepts_nested_attributes_for :elementos_por_acao_do_contigenciamento, reject_if: :all_blank, allow_destroy: true

	validates_associated :elementos_por_acao_do_contigenciamento

	validates :elementos_por_acao_do_contigenciamento, uniq_nested_attributes: {
		atributo: :elemento_de_despesa_id,
		mensagem: "Elemento de Despesa deve ser único dentro da Ação"
	}

	validates_presence_of :acao_id

	validate :valida_vinculo_com_elemento

	def valor_contingenciado
		elementos_por_acao_do_contigenciamento.inject(0) do |total, elemento_por_acao|
			total + elemento_por_acao.valor.to_f
		end
	end

	private
		def valida_vinculo_com_elemento
			if elementos_por_acao_do_contigenciamento.empty? || elementos_por_acao_do_contigenciamento.all?{ |elemento| elemento.marked_for_destruction? }
				errors.add(:acao_id, "É preciso vincular no mínimo um Elemento de Despesa por Ação")
			end
		end
end
