class Obra::ComponenteDaOperacaoDeCredito < ApplicationRecord
	has_paper_trail

	belongs_to :operacao_de_credito, class_name: "Obra::OperacaoDeCredito"

	has_many :subcomponentes_da_operacao_de_credito, class_name: "Obra::SubcomponenteDaOperacaoDeCredito", dependent: :destroy
	has_many :acoes_do_componente, through: :subcomponentes_da_operacao_de_credito

	accepts_nested_attributes_for :subcomponentes_da_operacao_de_credito, reject_if: :all_blank, allow_destroy: true

	validates :descricao, presence: true

	before_create :gerar_numero
	after_destroy :reordenar_numero

	def valor_total_das_acoes
		valor_total_acoes = acoes_do_componente.inject(0) { |valor_total_acao, acao_do_componente|
			valor_total_acao + acao_do_componente.valor_total.to_f
		}
	end

	private

	def gerar_numero
		self.codigo = operacao_de_credito.componentes_da_operacao_de_credito.maximum(:codigo).to_i + 1
	end

	def reordenar_numero
		proximo_numero = 1
		if operacao_de_credito.componentes_da_operacao_de_credito.any?
			operacao_de_credito.componentes_da_operacao_de_credito.order(:codigo).each do |foto|
				foto.update_column(:codigo, proximo_numero)
				proximo_numero += 1
			end
		end
	end
end
