module Contabilidade
class BalancetesDeVerificacoesController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_balancete_de_verificacao, only: [:show, :edit, :update, :destroy]
	before_action :set_bem_do_balancete, only:[:editar_bem, :atualizar_bem]
	before_action :disponibiliza_dependencias_bem_do_balancete, only: [:editar_bem]
	before_action :disponibiliza_dependencias, only: [:show, :index, :new]


	# GET /contabilidade/balancetes_de_verificacoes
	def index
		@q = Contabilidade::BalanceteDeVerificacao.where(orcamento_id: contexto_atual.id).order('orcamento_id DESC, mes_de_referencia DESC').search(params[:q])
		@balancetes_de_verificacoes = @q.result(distinct: false).paginate(page: params[:page], per_page: 13)
	end

	# GET /contabilidade/balancetes_de_verificacoes/1
	def show
	end

	# GET /contabilidade/balancetes_de_verificacoes/new
	def new
		@balancete_de_verificacao = Contabilidade::BalanceteDeVerificacao.new(orcamento: contabilidade_atual)
	end

	# GET /contabilidade/balancetes_de_verificacoes/1/edit
	def edit
	end

	# POST /contabilidade/balancetes_de_verificacoes
	def create
		@balancete_de_verificacao = contabilidade_atual.balancetes_de_verificacoes.new(balancete_de_verificacao_params)

		if @balancete_de_verificacao.save
			redirect_to @balancete_de_verificacao, notice: 'Balancete de verificacao foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /contabilidade/balancetes_de_verificacoes/1
	def update
		if @balancete_de_verificacao.update( balancete_de_verificacao_params )
			redirect_to @balancete_de_verificacao, notice: 'Balancete de verificacao foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /contabilidade/balancetes_de_verificacoes/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@balancete_de_verificacao)
		redirect_to contabilidade_balancetes_de_verificacoes_url, mensagem
	end

	def editar_bem
	end

	def atualizar_bem
		if @bem_do_balancete.update(bem_do_balancete_params) && @bem_do_balancete.empenho.update(tipo_do_bem_do_empenho: bem_do_balancete_params[:conta_id] )
			redirect_to @bem_do_balancete.balancete_de_verificacao
		else
			disponibiliza_dependencias_bem_do_balancete
			render :editar_bem
		end
	end

	private
	def disponibiliza_dependencias
		@grupos_de_conta = contabilidade_atual.grupo_de_contas.limit(3)
		@unidades_gestoras = contabilidade_atual.unidades_gestoras.sort { |a, b| b.codigo.to_i <=> a.codigo.to_i }.reverse!
		@grupos_de_conta_balancete_verificacao = contabilidade_atual.grupo_de_contas.where('codigo in (1, 2, 3)')
		
	end

	def disponibiliza_dependencias_bem_do_balancete
		if @bem_do_balancete.uso_do_bem.eql?("especial")
			@contas_pcasp = Contabilidade::Conta.where("codigo LIKE '1232101%'").where.not(codigo: "123210100").where(orcamento_id: contexto_atual.id)
		elsif @bem_do_balancete.uso_do_bem.eql?("dominical")
			@contas_pcasp = Contabilidade::Conta.where("codigo LIKE '1232104%'").where.not(codigo: "123210400").where(orcamento_id: contexto_atual.id)
		elsif	@bem_do_balancete.uso_do_bem.eql?("comum_do_povo")
			@contas_pcasp = Contabilidade::Conta.where("codigo LIKE '1232105%'").where.not(codigo: "123210500").where(orcamento_id: contexto_atual.id)
		end
	end

	def set_balancete_de_verificacao
		@balancete_de_verificacao = Contabilidade::BalanceteDeVerificacao.find( params[:id] )
	end

	def set_bem_do_balancete
		@bem_do_balancete = Contabilidade::BemDoBalancete.find_by(id: params[:id])
	end

	# Permite apenas os parâmetros específicos
	def balancete_de_verificacao_params
		params.require(:contabilidade_balancete_de_verificacao).permit(:orcamento_id, :mes_de_referencia, :tem_que_gerar_bens_do_balancete)
	end

	def bem_do_balancete_params
		params.require(:contabilidade_bem_do_balancete).permit(:lancado, :uso_do_bem, :conta_id, :empenho_id, :balancete_de_verificacao_id)
	end

end
end
