class GestaoDeEstoque::ComissoesController < ApplicationController
	include ControllerConcern

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

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

	# GET /gestao_de_estoque/comissoes/1
	def show
	end

	# GET /gestao_de_estoque/comissoes/new
	def new
		@comissao = GestaoDeEstoque::Comissao.new
	end

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

	# POST /gestao_de_estoque/comissoes
	def create
		@comissao = GestaoDeEstoque::Comissao.new(comissao_params)

		if @comissao.save
			redirect_to @comissao, notice: 'Comissão foi criado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /gestao_de_estoque/comissoes/1
	def update
		if @comissao.update( comissao_params )
			redirect_to @comissao, notice: 'Comissão foi atualizado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /gestao_de_estoque/comissoes/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@comissao)
		redirect_to gestao_de_estoque_comissoes_url, mensagem
	end

	def disponibiliza_dependencias
		@tipos_de_comissoes = GestaoDeEstoque::Comissao.tipos_de_comissoes
	end

	def extinguir_comissao
		if @comissao.update(extinguir_comissao_params)
			redirect_to @comissao, notice: 'Comissão foi extinta com sucesso.'
			@comissao.membros_da_comissao.each do |membro|
				membro.update(data_de_saida: @comissao.data_de_extincao)
			end
		else
			redirect_to @comissao, notice: 'Preencha os campos pedidos para extinguir a comissão'
		end
	end

	private
	def set_comissao
		@comissao = GestaoDeEstoque::Comissao.find(params[:id])
	end

	# Permite apenas os parâmetros específicos
	def comissao_params
		params.require(:gestao_de_estoque_comissao).permit(
			:codigo,
			:data_da_portaria,
			:numero_da_portaria,
			:nome_da_comissao,
			:tipo_de_comissao,
			:data_de_extincao,
			:numero_da_portaria_de_extincao
		)
	end

	def extinguir_comissao_params
		params.require(:gestao_de_estoque_comissao).permit(
			:data_de_extincao,
			:numero_da_portaria_de_extincao
		)
	end
end
