module Base
class ItensController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_item, only: [:show, :edit, :update, :destroy, :show_lista_de_itens_no_patrimonio]
	before_action :disponibiliza_dependencias, only: [:index, :new, :edit]

	# GET /base/categorias
	def index
		@q = Item.order(:id).ransack(query_params)
		@itens = @q.result(distinct: false).paginate(page: params[:page], per_page: 50)

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

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

	# GET /base/itens/new
	def new
		if params[:item_duplicado_id].present?
			item_duplicado = Base::Item.find(params[:item_duplicado_id])

			@item = Item.new(descricao:item_duplicado.descricao, unidade_de_medida_id:item_duplicado.unidade_de_medida_id,
				ncm_id: item_duplicado.ncm_id, descricao_tecnica: item_duplicado.descricao_tecnica, codigo_na_prefeitura:
				item_duplicado.codigo_na_prefeitura, combustivel: item_duplicado.combustivel, perecivel: item_duplicado.perecivel,
				esconder: item_duplicado.esconder
			)
		else
			@item = Item.new

			@categoria = Base::Categoria.find_by_id(params[:categoria_id])
		end
	end

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

	# POST /base/itens
	def create
		@item = Item.new(item_params)
		respond_to do |format|
			if @item.save
				@message = 'Item foi criado com sucesso.'
				format.html { redirect_to @item.categoria, notice: @message }
				format.js {render "create",:locals => {:pedido_id => params["base_item"]["pedido_id"]}}
			else
				disponibiliza_dependencias
				format.html {render :new}
				format.js { render json: { model: @item.class.name.gsub("::", "_").try(:downcase), errors: @item.errors }, status: :unprocessable_entity }
			end
		end
	end

	# PATCH/PUT /base/itens/1
	def update
		if @item.update( item_params )
			redirect_to @item.categoria, notice: 'Item foi atualizado com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /base/itens/1
	def destroy
		if @item.delete
			redirect_to base_itens_path
		else
			redirect_to @item, @item.errors.messages
		end
	end

	#----------------------------------------------#
	def show_lista_de_itens_no_patrimonio
		@unidades_gestoras = contexto_atual.unidades_gestoras.select("DISTINCT ON (codigo) *").sort { |a, b| b.codigo.to_i <=> a.codigo.to_i }.reverse!
		# @unidades_gestoras = contexto_atual.unidades_gestoras.all
		@almoxarifado = GestaoDeEstoque::Almoxarifado.find( params[:almoxarifado] ) if params[:almoxarifado].present?
		@q = Patrimonio::BemPatrimonial.joins(:item).where(base_itens: {id: params[:id]}).order(:numero_do_tombamento).ransack(params[:q])
		@itens_tombados = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end
	#----------------------------------------------#
	
	def retorna_informacao_item
		item = Base::Item.find(params[:id])
		render json: {
			'num_ncm': item.ncm_id
		}
	end


	private
	def set_item
		@item = Item.find( params[:id] )
		@categoria = @item.categoria
	end

	def disponibiliza_dependencias
		@categorias = Categoria.all.select(&:pode_ter_itens?).sort_by {|categoria| categoria.titulo}
		@unidades_de_medida = UnidadeDeMedida.disponiveis
		@ncms = Ncm.order(:descricao).all
	end

	# Permite apenas os parâmetros específicos
	def item_params
		params.require(:base_item).permit(:perecivel, :descricao, :unidade_de_medida_id, :ncm_id, :descricao_tecnica, :codigo_na_prefeitura, :categoria_id, :combustivel, :esconder)

	end
end
end
