module Loa
class GestoresController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :bloquear_orcamento, only: [:destroy]
	before_action :set_gestor, only: [:show, :edit, :update, :destroy]
	before_action :set_unidade_gestora, only: [:new, :create]
	before_action :disponibiliza_dependencias, only: [:new, :edit]

	# GET /loa/gestores/new
	def new
		@gestor = @unidade_gestora.gestores.new
	end

	# GET /loa/gestores/1/edit
	def edit
	end

	# POST /loa/gestores
	def create
		@gestor = @unidade_gestora.gestores.new(gestor_params)

		if @gestor.save
			redirect_to @unidade_gestora, notice: 'Gestor foi criado com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /loa/gestores/1
	def update
		if @gestor.update( gestor_params )
			redirect_to @gestor.unidade_gestora, notice: 'Gestor foi atualizado com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /loa/gestores/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@gestor)
		redirect_to @gestor.unidade_gestora, mensagem
	end

	private
	def set_gestor
		@gestor = Gestor.find( params[:id] )
	end

	def set_unidade_gestora
		@unidade_gestora = Loa::UnidadeGestora.find( params[:unidade_gestora_id] )
	end

	def disponibiliza_dependencias
		@agentes_publicos_municipais = Base::AgentePublicoMunicipal.includes(:pessoa).select('distinct on (pessoa_id) *')
		@ingresso_nos_sistemas_publicos_municipais = Loa::Gestor.ingresso_nos_sistemas_publicos_municipais
		@tipos_de_cargos = Loa::Gestor.tipos_de_cargos
		@tipos_de_relacoes_com_servico_publico = Loa::Gestor.tipos_de_relacoes_com_servico_publico
	end

	# Permite apenas os parâmetros específicos
	def gestor_params
		params.require(:loa_gestor).permit(:unidade_gestora_id, :agente_publico_municipal_id, :inicio_da_gestao, :fim_da_gestao,
		:numero_da_portaria, :data_da_portaria, :ingresso_sistema_publico_municipal, :tipo_de_cargo, :tipo_relacao_servico_publico)
	end
end
end
