class Patrimonio::BaixaDoBemEmMassa < ApplicationRecord
  has_paper_trail

  include TradutorConcern
  include IncrementadorDeCodigoConcern
  include AASM

  belongs_to :orcamento, class_name: 'Orcamento'
  belongs_to :comissao, class_name: 'Patrimonio::Comissao'
  belongs_to :centro_de_custo, class_name: 'Controladoria::CentroDeCusto'
  belongs_to :agente_publico_municipal, class_name: 'Base::AgentePublicoMunicipal'

  has_many :baixas_dos_bens, class_name: 'Patrimonio::BaixaDoBem', dependent: :destroy

  accepts_nested_attributes_for :baixas_dos_bens, allow_destroy: true

  validates_presence_of :data, :motivo_da_baixa, :centro_de_custo_id, :comissao_id, :observacao

  before_save :gera_codigo, if: Proc.new { new_record? || data_changed? }

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

  enum motivo_da_baixa: {
    cessao: 1,
    destruicao: 2,
    doacao: 3,
    furto: 4,
    inservivel: 5,
    morte: 6,
    inclusao_indevida: 7,
    para_relancamento: 8,
    perda: 9,
    permuta: 10,
    renuncia_de_direito: 11,
    roubo: 12,
    sinistro: 13,
    transformacao: 14,
    venda: 15
  }

  aasm column: :status, enum: true, whiny_transitions: false do
    state :solicitado, :initial => true
    state :confirmado

    event :confirmar do
      transitions from: :solicitado, to: :confirmado do
        guard do
          self.solicitado? && self.baixas_dos_bens.size > 0
        end
        after do
          self.baixas_dos_bens.each do |baixa|
            baixa.status = 2
            baixa.gera_alteracao_do_valor_do_bem(self.orcamento)
            baixa.gerar_movimentacao_financeira_do_tombamento
            # baixa.baixa_o_bem_patrimonial
            # baixa.gera_conservacao_do_bem
          end
        end
      end

    end

  end

  def gera_codigo
		gerar_codigo(data, :codigo, :data, :orcamento_id, self.orcamento_id)
	end

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