class Ppa::MetasController < ApplicationController
	include ControllerConcern
	include PpaControllersConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_ppa_meta, only: [:show, :edit, :update, :destroy]
	before_action :set_unidades_medida

	# GET /ppa/metas/new
	def new
		objetivo = Ppa::Objetivo.find( params[:objetivo_id] )
		@ppa_meta = objetivo.metas.build
		ppa = @ppa_meta.ppa
		(ppa.exercicio_inicial..ppa.exercicio_final).each do |exercicio|
			@ppa_meta.quantitativos.build(exercicio: exercicio, indice_de_referencia: 0)
		end
	end

	# GET /ppa/metas/1/edit
	def edit
	end

	# POST /ppa/metas
	def create
		@ppa_meta = Ppa::Meta.new(ppa_meta_params)
		if @ppa_meta.save
			if manter_form_apos_cadastro?
				redirect_path = { action: :new, objetivo_id: @ppa_meta.objetivo.id }
			else
				redirect_path = @ppa_meta.objetivo
			end
			redirect_to redirect_path, notice: 'Meta foi criada com sucesso.'
		else
			set_unidades_medida
			render :new
		end
	end

	# PATCH/PUT /ppa/metas/1
	def update
		if @ppa_meta.update(ppa_meta_params)
			redirect_to @ppa_meta.objetivo
		else
			render :edit
		end
	end

	# DELETE /ppa/metas/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@ppa_meta)
		redirect_to @ppa_meta.objetivo, mensagem
	end

	private
	# Use callbacks to share common setup or constraints between actions.
	def set_ppa_meta
		@ppa_meta = Ppa::Meta.find(params[:id])
	end

	def set_unidades_medida
		@unidades_de_medida = UnidadeDeMedida.all
	end

	# Only allow a trusted parameter "white list" through.
	def ppa_meta_params
		params.require(:ppa_meta).permit(:objetivo_id, :descricao,quantitativos_attributes: [ :id, :unidade_de_medida_id, :indice_de_referencia, :exercicio, :_destroy])
	end
end
