module Base
class AgentesPublicosMunicipaisController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:pesquisa, :resultado]
	before_action :set_agente_publico_municipal, only: [:show, :edit, :update, :destroy]

	# GET /base/agentes_publicos_municipais
	def index
		disponibiliza_dependencias
		@q = AgentePublicoMunicipal.joins(unidade_orcamentaria: [orgao: :orcamento]).where("orcamentos.exercicio = ?", contexto_atual.exercicio).order(:id).ransack(query_params)
		@agentes_publicos_municipais = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)

		respond_to do |format|
			format.html
			format.json
		end
	end

	# GET /base/agentes_publicos_municipais/1
	def show
		respond_to do |format|
			format.html
			format.json
		end
	end

	# GET /base/agentes_publicos_municipais/new
	def new
		@agente_publico_municipal = Base::AgentePublicoMunicipal.new
		disponibiliza_dependencias
	end

	# GET /base/agentes_publicos_municipais/1/edit
	def edit
		disponibiliza_dependencias
	end

	# POST /base/agentes_publicos_municipais
	def create
		@agente_publico_municipal = AgentePublicoMunicipal.new(agente_publico_municipal_params)
		if @agente_publico_municipal.save
			redirect_to @agente_publico_municipal, notice: 'Agente publico municipal foi criado com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /base/agentes_publicos_municipais/1
	def update
		if @agente_publico_municipal.update( agente_publico_municipal_params )
			redirect_to @agente_publico_municipal, notice: 'Agente publico municipal foi atualizado com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	def pesquisa
		return if bloqueia_usuario_com_base_em 'read'
		@q = AgentePublicoMunicipal.search(params[:q])
		render layout: false
	end

	def resultado
		return if bloqueia_usuario_com_base_em 'read'
		@q = AgentePublicoMunicipal.order(:id).search(params[:q])
		@agentes_publicos_municipais = @q.result(distinct: false).paginate(page: params[:page], per_page: 7)
		render layout: false
	end

	def disponibiliza_dependencias
		@usuarios = Usuario.all
		@pessoas = Base::Pessoa.joins(:tipo_de_pessoa).where( base_tipo_de_pessoas: {descricao: "Pessoa Física"})
		@codigos_sexo = Base::AgentePublicoMunicipal.codigos_sexo
		@graus_de_instrucao = Base::AgentePublicoMunicipal.graus_de_instrucao
		@tipos_de_programa = Base::AgentePublicoMunicipal.tipos_de_programa
		@tipos_de_cargos = Base::AgentePublicoMunicipal.tipos_de_cargos
		@codigo_ocupacoes = Base::AgentePublicoMunicipal.codigo_ocupacoes
		@situacoes_funcionais = Base::AgentePublicoMunicipal.situacoes_funcionais
		@ingresso_nos_sistemas_publicos_municipais = Base::AgentePublicoMunicipal.ingresso_nos_sistemas_publicos_municipais
		@tipos_de_amparos_legais = Base::AgentePublicoMunicipal.tipos_de_amparos_legais
		@tipos_de_relacoes_com_servico_publico = Base::AgentePublicoMunicipal.tipos_de_relacoes_com_servico_publico
		@regimes_juridicos = Base::AgentePublicoMunicipal.regimes_juridicos
		@regimes_previdenciarios = Base::AgentePublicoMunicipal.regimes_previdenciarios

		disponibiliza_dependencias_da_unidade
	end

	def disponibiliza_dependencias_da_unidade
		unidades_gestoras = contexto_atual.unidades_gestoras
		if !@agente_publico_municipal.nil? && !@agente_publico_municipal.unidade_orcamentaria.nil?
			unidade_gestora_do_agente_id = @agente_publico_municipal.unidade_orcamentaria.unidade_gestora.id
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(unidade_gestora_id: unidades_gestoras.ids).or(contexto_atual.unidades_orcamentarias.where(unidade_gestora_id: unidade_gestora_do_agente_id))
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(unidade_gestora_id: unidades_gestoras.ids)
		end
	end

	# DELETE /base/agentes_publicos_municipais/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@agente_publico_municipal, false)
		redirect_to base_agentes_publicos_municipais_url, mensagem
	end

	private
	def set_agente_publico_municipal
		@agente_publico_municipal = AgentePublicoMunicipal.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def agente_publico_municipal_params
		params.require(:base_agente_publico_municipal).permit(:unidade_orcamentaria_id,
		:ingresso_sistema_publico_municipal, :tipo_relacao_servico_publico, :numero_de_posse,
		:data_da_posse, :tipo_de_amparo_legal, :data_do_amparo_legal, :data_da_publicacao_do_amparo_legal, :matricula_municipal,
		:situacao_funcional, :regime_juridico, :regime_previdenciario, :codigo_ocupacao, :tipo_de_cargo, :carga_horaria_semanal,
		:tipo_de_programa, :codigo_pis_pasep, :titulo_de_eleitor,:grau_de_instrucao, :codigo_sexo,:nome_da_mae,
		:nome_do_pai,:usuario_id, :pessoa_id)
	end
end
end
