class Patrimonio::AlteracaoDoValorDoBem < ApplicationRecord
  include TradutorConcern

  has_paper_trail

  attr_default :status, :solicitado
  attr_accessor :valor_final

  belongs_to :bem_patrimonial, class_name: 'Patrimonio::BemPatrimonial'
  belongs_to :comissao, class_name: 'Patrimonio::Comissao'

  has_one :movimentacoes_financeiras_dos_bens, class_name: 'Patrimonio::MovimentacaoFinanceiraDoBem'

  validates_presence_of :bem_patrimonial_id, :data_da_alteracao, :comissao_id, :tipo_de_alteracao, :valor_base, :valor_alterado
  validates :data_da_alteracao, date: true
  validate :valor_alterado_maior_que_o_valor_base, on: :create

  after_create :gerar_movimentacao_financeira_do_tombamento
  after_destroy :remove_dependentes

  enum status: {
    solicitado: 1,
    confirmado: 2
  }

  enum tipo_de_alteracao: {
    custo_subsequente: 1,
    reducao_de_valor: 2,
    baixa_depreciacao_acumulada: 3,
    ajuste_inicial: 4
  }

  def gerar_movimentacao_financeira_do_tombamento
    movimentacao_financeira_do_tombamento = Patrimonio::MovimentacaoFinanceiraDoBem.create!(
      bem_patrimonial_id: self.bem_patrimonial.id,
      data_da_movimentacao: self.data_da_alteracao,
      origem_id: self.id,
      origem_type: self.class.name,
      valor_inicial: self.valor_base,
      valor_da_operacao: (self.valor_alterado * -1),
      valor_final: (self.valor_base + (self.valor_alterado * -1)) #valor alterado é negativo
    )
  end

  def remove_dependentes
    ActiveRecord::Base.connection.execute("DELETE FROM patrimonio_movimentacoes_financeiras_dos_bens WHERE origem_id = #{self.id} and origem_type = '#{Patrimonio::AlteracaoDoValorDoBem}'")
  end

  def tipo_de_label_status
		if self.solicitado?
			'info'
		else
			'success'
		end
	end

  private
  # VALIDAÇÕES
  def valor_alterado_maior_que_o_valor_base
    if self.valor_alterado && self.valor_alterado > self.valor_base
      errors.add(:valor_alterado, "não pode ser maior que o valor base: #{self.valor_base.real_contabil}")
    end
  end

end
