module Projecao
class IndicesDeProjecaoController < ApplicationController
	include ControllerConcern

	before_action do
		autoriza_usuario!(action_name, "projecao/projecoes_de_receitas")
	end
	before_action :authenticate_usuario!
	before_action :verifica_se_tem_contexto_valido_na_sessao!
	before_action :set_projecao_de_receita, only: [:new, :create]
	before_action :set_indice_de_projecao, only: [:edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:new, :edit]

	# GET /projecao/indices_de_projecao/new
	def new
		@indice_de_projecao = @projecao_de_receita.indices_de_projecao.new
	end

	# GET /projecao/indices_de_projecao/1/edit
	def edit
	end

	# POST /projecao/indices_de_projecao
	def create
		@indice_de_projecao = @projecao_de_receita.indices_de_projecao.new(indice_de_projecao_params)
		if @indice_de_projecao.save
			redirect_path = manter_form_apos_cadastro? ? new_projecao_indice_de_projecao_path : projecao_projecao_de_receita_path(tab: 'indices')
			redirect_to redirect_path, notice: 'Indice de projeção foi criado com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /projecao/indices_de_projecao/1
	def update
		if @indice_de_projecao.update( indice_de_projecao_params )
			redirect_to projecao_projecao_de_receita_path(tab: 'indices'), notice: 'Indice de projeção foi atualizado com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /projecao/indices_de_projecao/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@indice_de_projecao)
		redirect_to projecao_projecao_de_receita_path(tab: 'indices'), mensagem
	end

	private
	def set_indice_de_projecao
		@indice_de_projecao = IndiceDeProjecao.find(params[:id])
	end

	def disponibiliza_dependencias
		@grupos_de_indice = contexto_atual.projecao_de_receita.grupos_de_indice.order(:id)
		@exercicios_de_projecao = contexto_atual.projecao_de_receita.exercicios_destino.to_a
		@exercicios_de_projecao.shift if contexto_atual.is_a? Orcamento

	end

	def set_projecao_de_receita
		@projecao_de_receita = contexto_atual.projecao_de_receita
	end

	# Permite apenas os parâmetros específicos
	def indice_de_projecao_params
		params.require(:projecao_indice_de_projecao).permit(:grupo_de_indice_id, :nome, :fonte_das_projecoes, projecoes_do_indice_attributes: [:id, :exercicio, :percentual, :_destroy])
	end
end
end
