module Base
class CategoriasController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:subcategorias]
	before_action :set_categoria, only: [:show, :destroy]
	before_action :disponibiliza_dependencias, only: [:index, :new]

	# GET /base/categorias
	def index
		@categorias = Base::Categoria.includes(:itens).principais.order(:titulo)
	end

	# GET /base/categorias/1
	def show
		@q = Base::Item.where(categoria: @categoria).ransack(query_params)
		if @categoria.pode_ter_itens?
			@filhos = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end
	end

	# GET /base/categorias/1/edit
	#def edit
	#end

	# PATCH/PUT /base/categorias/1
	#def update
	#	if @categoria.update( categoria_params )
	#		redirect_to @categoria, notice: 'Categoria foi atualizada com sucesso.'
	#	else
	#		disponibiliza_dependencias
	#		render :edit
	#	end
	#end

	# DELETE /base/categorias/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@categoria)
		redirect_to base_categorias_url, mensagem
	end

	#GET /base/categorias/1/subcategorias
	def subcategorias
		return if bloqueia_usuario_com_base_em 'read'
		render json: Base::Categoria.where(categoria_superior_id: params[:id])
	end

	private
	def disponibiliza_dependencias
		@tipos = Categoria.tipos
	end

	def set_categoria
		@categoria = Categoria.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def categoria_params
		params.require(:base_categoria).permit(:categoria_superior_id, :titulo, :tipo, :codigo)
	end
end
end
