class Contabilidade::GrupoDeEventoContabil < ApplicationRecord
  has_paper_trail

  attr_accessor :transferir_grupos, :exercicio, :grupo_de_eventos_contabeis_ids, :eventos_ids_para_inserir, :eventos_ids_para_remover

  has_many :eventos_contabeis, class_name: 'Contabilidade::EventoContabil', dependent: :destroy

  accepts_nested_attributes_for :eventos_contabeis

  after_save :importa_eventos, if: Proc.new{ transferir_grupos == '1' }
  after_save :faz_ligacao_com_eventos, if: Proc.new{ eventos_ids_para_inserir.present? }
  after_save :remove_ligamento_com_eventos, if: Proc.new{ eventos_ids_para_remover.present? }

  validates_presence_of :nome_do_grupo, :categoria_de_lancamento, :lancamento_manual

  enum categoria_de_lancamento: {
		regular: 1,
		estorno: 2,
		circulante_para_nao_circulante: 3,
		nao_circulante_para_circulante: 4
	}

	enum titulo: {
		tributaria: 1,
		nao_tributaria: 2
	}

  enum lancamento_manual: {
    divida_ativa: 1,
    almoxarifado: 2,
    precatorio: 3,
    provisoes: 4,
    imobilizado: 5,
    rpps: 6,
    operacao_de_credito: 7,
    investimentos: 8,
    obrigacoes: 9,
    abertura: 999,
    encerramento: 1000,
    pre_encerramento: 1001
  }

  private
  def faz_ligacao_com_eventos
    Contabilidade::EventoContabil.where(id: eventos_ids_para_inserir).update_all(grupo_de_evento_contabil_id: id)
  end

  def remove_ligamento_com_eventos
    Contabilidade::EventoContabil.where(id: eventos_ids_para_remover).update_all(grupo_de_evento_contabil_id: nil)
  end

  def importa_eventos
    if grupo_de_eventos_contabeis_ids.present? && grupo_de_eventos_contabeis_ids.any?
      Contabilidade::EventoContabil.where(grupo_de_evento_contabil_id: grupo_de_eventos_contabeis_ids).update_all(grupo_de_evento_contabil_id: id)
      Contabilidade::GrupoDeEventoContabil.where(id: grupo_de_eventos_contabeis_ids).delete_all
    end
  end

  def nome_categoria_titulo_tipo
    "#{self.nome_do_grupo} - #{self.categoria_de_lancamento_i18n.to_s.upcase} - #{self.titulo_i18n.to_s.upcase} - #{self.lancamento_manual_i18n.to_s.upcase}"
  end
end
