class Licitacao::EmpenhoRetroativoDoContrato < ApplicationRecord
  has_paper_trail

  belongs_to :contrato, class_name: 'Licitacao::Contrato'

  has_many :itens_do_empenho_retroativo_do_contrato, class_name: 'Licitacao::ItemDoEmpenhoRetroativoDoContrato', dependent: :destroy
  has_many :itens, through: :itens_do_empenho_retroativo_do_contrato

  accepts_nested_attributes_for :itens_do_empenho_retroativo_do_contrato, reject_if: :all_blank, allow_destroy: true

  validates_presence_of :numero_empenho, :data_do_empenho, on: :create, message: "Por favor, preencher este campo."

  validate :data_deve_estar_inclusa_na_vigencia_do_contrato, if: Proc.new { self.contrato.present? && !self.data_do_empenho.blank? }
	validates :data_do_empenho, sabado_ou_domingo_ou_feriado: { flexivel: false }

  validates :itens_do_empenho_retroativo_do_contrato, uniq_nested_attributes: { atributo: :item_do_contrato_id, mensagem: "Item deve ser único."}

  # BOOLEANS

  def possui_itens_repetidos?
		itens_do_empenho_retroativo_do_contrato.count != itens_do_empenho_retroativo_do_contrato.distinct.count
	end

  # VALORES

  def valor_total_dos_itens
		itens_do_empenho_retroativo_do_contrato.sum(:total)
	end

	def definir_valor_do_empenho_retroativo
    valor_total_dos_itens.to_f
	end

  # VALIDAÇÕES

  def data_deve_estar_inclusa_na_vigencia_do_contrato
    data = self.data_do_empenho
    if data < contrato.inicio_da_vigencia || data > contrato.data_final_de_acordo_com_aditivos
      errors.add(:data_do_empenho, "Deve estar dentro da vigência do contrato (#{contrato.inicio_da_vigencia} à #{contrato.data_final_de_acordo_com_aditivos})")
    end
  end
end

