module GestaoDeEstoque
	class ControleDePragasController < ApplicationController
		include ControllerConcern

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!, except: [:disponibiliza_dependencias]
		before_action :set_controle_de_praga, only: [:show, :edit, :update, :destroy]
		before_action :disponibiliza_dependencias, only: [:index, :new, :edit]

		# GET /gestao_de_estoque/controle_de_pragas
		def index
			@q = GestaoDeEstoque::ControleDePraga.order(:id).search(params[:q])
			@controle_de_pragas = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end

		# GET /gestao_de_estoque/controle_de_pragas/1
		def show
		end

		# GET /gestao_de_estoque/controle_de_pragas/new
		def new
			@controle_de_praga = GestaoDeEstoque::ControleDePraga.new
		end

		# GET /gestao_de_estoque/controle_de_pragas/1/edit
		def edit
		end

		# POST /gestao_de_estoque/controle_de_pragas
		def create
			@controle_de_praga = GestaoDeEstoque::ControleDePraga.new(controle_de_praga_params)

			if @controle_de_praga.save
				redirect_to @controle_de_praga, notice: 'Controle de praga foi criado(a) com sucesso.'
			else
				disponibiliza_dependencias
				render :new
			end
		end

		# PATCH/PUT /gestao_de_estoque/controle_de_pragas/1
		def update
			if @controle_de_praga.update( controle_de_praga_params )
				redirect_to @controle_de_praga, notice: 'Controle de praga foi atualizado(a) com sucesso.'
			else
				disponibiliza_dependencias
				render :edit
			end
		end

		# DELETE /gestao_de_estoque/controle_de_pragas/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@controle_de_praga)
			redirect_to gestao_de_estoque_controle_de_pragas_url, mensagem
		end

		private
		def set_controle_de_praga
			@controle_de_praga = GestaoDeEstoque::ControleDePraga.find( params[:id] )
		end

		def disponibiliza_dependencias
			@empresas_responsaveis = Base::Pessoa.includes(:tipo_de_pessoa).order(id: :desc)
			@almoxarifados = GestaoDeEstoque::Almoxarifado.includes(:unidades_orcamentarias_do_almoxarifado).order(id: :desc)
		end

		# Permite apenas os parâmetros específicos
		def controle_de_praga_params
			params.require(:gestao_de_estoque_controle_de_praga)
				.permit(
					:numero,
					:data_da_dedetizacao,
					:empresa_responsavel_id,
					:tipo_de_praga,
					:frequencia_media,
					:data_da_proxima_dedetizacao,
					:almoxarifado_id
				)
		end
	end
end
