class UnidadesDeMedidaController < ApplicationController
	include ControllerConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:esconder_unidade]
	before_action :set_unidade_de_medida, only: [:edit, :update, :destroy]

	# GET /unidades_de_medida
	def index
		@q = UnidadeDeMedida.order(:id).search(params[:q])
		@unidade_de_medida = UnidadeDeMedida.new
		@unidades_de_medida = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /unidades_de_medida/new
	def new
		@unidade_de_medida = UnidadeDeMedida.new
	end

	# GET /unidades_de_medida/1/edit
	def edit
	end

	# POST /unidades_de_medida/:id/esconder_unidade
	def esconder_unidade
		return if bloqueia_usuario_com_base_em 'update'

		unidade_de_medida = params[:unidade_de_medida]
		erros = Set.new

		ActiveRecord::Base.transaction do
			unidade_de_medida.each do |id, valor|
				if valor.eql?("1")
					unidade_de_medida = UnidadeDeMedida.find(id.to_s.to_i)
					unidade_de_medida.esconder_unidade = true
					unless unidade_de_medida.save
						unidade_de_medida.errors.full_messages.each do |erro|
							erros << erro
						end
						raise ActiveRecord::Rollback
					end
				elsif valor.eql?("0")
					unidade_de_medida = UnidadeDeMedida.find(id.to_s.to_i)
					unidade_de_medida.esconder_unidade = false
					unless unidade_de_medida.save
						unidade_de_medida.errors.full_messages.each do |erro|
							erros << erro
						end
						raise ActiveRecord::Rollback
					end
				end
			end
			if erros.size == 0
				redirect_to unidades_de_medida_path, success: "Unidades de medida foram atualizadas com sucesso"
			else
				redirect_to unidades_de_medida_path, alert: "Falha ao atualizar unidades de medida"
			end
		end
	end

	# POST /unidades_de_medida
	def create
		@unidade_de_medida = UnidadeDeMedida.new(unidade_de_medida_params)

		if @unidade_de_medida.save
			redirect_to unidades_de_medida_url, notice: 'Unidade de medida foi criado com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /unidades_de_medida/1
	def update
		if @unidade_de_medida.update(unidade_de_medida_params)
			redirect_to unidades_de_medida_url, notice: 'Unidade de medida foi atualizado com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /unidades_de_medida/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@unidade_de_medida)
		redirect_to unidades_de_medida_url, mensagem
	end

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

	# Only allow a trusted parameter "white list" through.
	def unidade_de_medida_params
		params.require(:unidade_de_medida).permit(:descricao, :utiliza_casa_decimal, :esconder_unidade)
	end
end
