module Contabilidade
class PeriodosMatrizDeSaldosContabeisController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_periodo_matriz_de_saldo_contabil, only: [:show, :edit, :update, :destroy, :download_arquivos_msc, :editar_campos_para_mapeamentos_manuais, :atualizar_campos_para_mapeamentos_manuais]

	# GET /contabilidade/periodos_matriz_de_saldos_contabeis
	def index
		@q = PeriodoMatrizDeSaldoContabil.where(ano_referencia: contexto_atual.exercicio).order('ano_referencia DESC, mes_referencia DESC').search(params[:q])
		@periodos_matriz_de_saldos_contabeis = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /contabilidade/periodos_matriz_de_saldos_contabeis/1
	def show
	end

	# GET /contabilidade/periodos_matriz_de_saldos_contabeis/new
	def new
		@periodo_matriz_de_saldo_contabil = PeriodoMatrizDeSaldoContabil.new(ano_referencia: contexto_atual.exercicio)
	end

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

	# POST /contabilidade/periodos_matriz_de_saldos_contabeis
	def create
		@periodo_matriz_de_saldo_contabil = PeriodoMatrizDeSaldoContabil.new(periodo_matriz_de_saldo_contabil_params)

		if @periodo_matriz_de_saldo_contabil.save
			redirect_to @periodo_matriz_de_saldo_contabil, notice: 'Periodo matriz de saldo contabil foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /contabilidade/periodos_matriz_de_saldos_contabeis/1
	def update
		if @periodo_matriz_de_saldo_contabil.update( periodo_matriz_de_saldo_contabil_params )
			redirect_to @periodo_matriz_de_saldo_contabil, notice: 'Periodo matriz de saldo contabil foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end


	# GET /periodos_matriz_de_saldos_contabeis/:id/download_arquivos_msc
	def download_arquivos_msc
		respond_to do |format|
			format.zip do
				arquivo = @periodo_matriz_de_saldo_contabil.arquivos_msc.where(formato: params[:formato]).first
				compressed_filestream = Zip::OutputStream.write_buffer do |zos|
					zos.put_next_entry "#{arquivo.nome_do_arquivo}"
					zos.print arquivo.conteudo
				end
				compressed_filestream.rewind
				descricao = arquivo.nome_do_arquivo
				send_data compressed_filestream.read, filename: "Arquivo_MSC_"<<  descricao << ".zip"
			end
		end
	end

	# DELETE /contabilidade/periodos_matriz_de_saldos_contabeis/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@periodo_matriz_de_saldo_contabil)
		redirect_to contabilidade_periodos_matriz_de_saldos_contabeis_url, mensagem
	end

	# GET /contabilidade/periodos_matriz_de_saldos_contabeis/:id/editar_campos_para_mapeamentos_manuais
	def editar_campos_para_mapeamentos_manuais

	end

	# PATCH /contabilidade/periodos_matriz_de_saldos_contabeis/:id/atualizar_campos_para_mapeamentos_manuais
	def atualizar_campos_para_mapeamentos_manuais
		if @periodo_matriz_de_saldo_contabil.update(campos_manuais_params)
			redirect_to @periodo_matriz_de_saldo_contabil, notice: 'Campos Manuais Atualizada com Sucesso.'
		else
			flash.now[:alert] = "Não foi possivel atualizar o campo manual."
			render :editar_campos_para_mapeamentos_manuais
		end
	end

	def linha_de_campos_para_mapeamentos_manuais_filtrado
		if params[:anexo] == "anexo_03"
			#@linhas_filtrados = {"transferencia_obg_da_uniao_rel_individual"=>1, "transferencia_obg_da_uniao_rel_bancada"=>2}
			@linhas_filtrados = {"transferencia_obg_da_uniao_rel_individual"=>"( - ) Transferências obrigatórias da União relativas às emendas individuais (art. 166-A, § 1º, da CF) (IV)", "transferencia_obg_da_uniao_rel_bancada"=>"( - ) Transferências obrigatórias da União relativas às emendas de bancada (art. 166, § 16, da CF) (VI)"}
		elsif params[:anexo] == "anexo_06"
			#@linhas_filtrados = {"meta_fiscal_para_o_resultado_primario"=>3, "meta_fiscal_para_o_resultado_nominal"=>4}
			@linhas_filtrados = {"meta_fiscal_para_o_resultado_primario"=>"Meta Fiscal para o Resultado Primário", "meta_fiscal_para_o_resultado_nominal"=>"Meta Fiscal para o Resultado Nominal"}
		elsif params[:anexo] == "anexo_08"
			#@linhas_filtrados = {"total_mde_custeada"=>5, "total_transferidas_fundeb"=>6, "receita_fundeb"=>7, "superavit_exercicio"=>8, "restos_a_pagar_nao_processados"=>9, "cancelamento_no_exercicio"=>10, "total_das_despesas"=>11, "aplicacao_mde"=>12}
			@linhas_filtrados = {"total_mde_custeada"=>"22- TOTAL DAS DESPESAS DE MDE CUSTEADAS COM RECURSOS DE IMPOSTOS = L20(d ou e)", "total_transferidas_fundeb"=>"23- TOTAL DAS RECEITAS TRANSFERIDAS AO FUNDEB = (L4)", "receita_fundeb"=>"24- (-) RECEITAS DO FUNDEB NÃO UTILIZADAS NO EXERCÍCIO, EM VALOR SUPERIOR A 10% = L18(q)", "superavit_exercicio"=>"25- (-) SUPERÁVIT PERMITIDO NO EXERCÍCIO IMEDIATAMENTE ANTERIOR NÃO APLICADO NO EXERCÍCIO ATUAL = L19.1(x)", "restos_a_pagar_nao_processados"=>"26- (-) RESTOS A PAGAR NÃO PROCESSADOS INSCRITOS NO EXERCÍCIO SEM DISPONIBILIDADE FINANCEIRA DE RECURSOS DE IMPOSTOS", "cancelamento_no_exercicio"=>"27- (-) CANCELAMENTO, NO EXERCÍCIO, DE RESTOS A PAGAR INSCRITOS COM DISPONIBILIDADE FINANCEIRA DE RECURSOS DE IMPOSTOS VINCULADOS AO ENSINO = (L30.1(af) + L30.2(af))", "total_das_despesas"=>"28- TOTAL DAS DESPESAS PARA FINS DE LIMITE (22 + 23) - (24 + 25 + 26 + 27)", "aplicacao_mde"=>"29- APLICAÇÃO EM MDE SOBRE A RECEITA RESULTANTE DE IMPOSTOS "}
		else
			@linhas_filtrados = Contabilidade::MapeamentoManual.linhas_i18n
		end
		
		respond_to do |format|
			format.json {render json: @linhas_filtrados}
			format.js
		end
	end

	private
	def set_periodo_matriz_de_saldo_contabil
		@periodo_matriz_de_saldo_contabil = PeriodoMatrizDeSaldoContabil.find( params[:id] )
	end

	def campos_manuais_params
		begin
			params.require(:contabilidade_periodo_matriz_de_saldo_contabil).permit(mapeamentos_manuais_attributes: [:id, :anexo, :linha, :coluna, :mes, :tipo, :valor, :_destroy])
		rescue ActionController::ParameterMissing
			nil
		end
	end

	# Permite apenas os parâmetros específicos
	def periodo_matriz_de_saldo_contabil_params
		params.require(:contabilidade_periodo_matriz_de_saldo_contabil).permit(:mes_referencia, :ano_referencia)

	end
end
end
