class Contabilidade::CronogramaDoEmpenho < ApplicationRecord
  has_paper_trail

  belongs_to :empenho, class_name: 'Contabilidade::Empenho', required: true

  has_many :meses_do_cronograma_do_empenho, class_name: 'Contabilidade::MesDoCronogramaDoEmpenho', dependent: :destroy

  validates_uniqueness_of :empenho_id
  validates_presence_of :mes_inicial, :dia_do_reconhecimento
  validates :dia_do_reconhecimento, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 31, message: 'deve ser igual ou menor que 31' }

  validate :valida_total_maior_que_saldo_empenho
  validate :valida_total_deve_ser_maior_que_zero

  accepts_nested_attributes_for :meses_do_cronograma_do_empenho, reject_if: :all_blank, allow_destroy: true

  enum mes_inicial: {
    janeiro: 1,
    fevereiro: 2,
    marco: 3,
    abril: 4,
    maio: 5,
    junho: 6,
    julho: 7,
    agosto: 8,
    setembro: 9,
    outubro: 10,
    novembro: 11,
    dezembro: 12
  }

  def valor_total
    @valor_total ||= meses_do_cronograma_do_empenho.sum(&:valor)
  end

  def valida_total_maior_que_saldo_empenho
    errors.add(:total, 'Total Não pode ser maior saldo do empenho') if valor_total > empenho.definir_valor_do_empenho
  end

  def valida_total_deve_ser_maior_que_zero
    errors.add(:total, 'Total Precisa ser maior que zero') if 0 >= valor_total
  end
end
