class PerfisController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_perfil, only: [:edit, :update, :destroy, :show, :atualiza_permissoes]

	# GET /perfis
	# GET /perfis.json
	def index
		@perfis = Perfil.order(:nome).all.paginate(:page => params[:page], per_page: 10)
	end

	# GET /perfis/1
	# GET /perfis/1.json
	def show
		@posicao_da_aba = params[:posicao_da_aba].to_i || 0
		@permissoes = Acesso::Permissao.where(perfil_id: params[:id]).pluck(:acao_id)
		@modulos = Acesso::Modulo.includes(controles: :acoes).order(:id)
	end

	# GET /perfis/new
	def new
		@perfil = Perfil.new

		Acesso::Controle.all.each do |controle|
			@perfil.permissoes.build(controle: controle)
		end
	end

	# GET /perfis/1/edit
	def edit
	end

	# POST /perfis
	# POST /perfis.json
	def create
		@perfil = Perfil.new(perfil_params)

		if @perfil.save
			redirect_to @perfil, notice: 'Perfil cadastrado com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /perfis/1
	# PATCH/PUT /perfis/1.json
	def update
		if @perfil.update(perfil_params)
			redirect_to @perfil, notice: 'Perfil foi atualizado com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /perfis/1
	# DELETE /perfis/1.json
	def destroy
		mensagem = apaga_e_retorna_mensagem(@perfil)
		redirect_to perfis_url, mensagem
	end

	def atualiza_permissoes
		controles = params[:controles].map{ |i| i.to_i } rescue []
		@perfil.atualiza_permissoes(params[:modulo_id].to_i,  controles)
		redirect_to perfil_path(@perfil, posicao_da_aba: params[:posicao_da_aba]), notice: "Permissões atualizadas com sucesso."
	end

	private
	# Use callbacks to share common setup or constraints between actions.
	def set_perfil
		@perfil = Perfil.find(params[:id])
	end

	# Never trust parameters from the scary internet, only allow the white list through.
	def perfil_params
		params.require(:perfil).permit(:nome, :posicao_da_aba, permissoes_attributes:[:id, :controle_id, :permitido])
	end
end
