# frozen_string_literal: true

# module settings
module Settings
  # Users
  class UsersController < ApplicationController
    before_action :authenticate_user!
    before_action :set_user, only: %i[show edit update destroy]

    # GET /users or /users.json
    def index
      @users = User.all
    end

    # GET /users/1 or /users/1.json
    def show; end

    # GET /users/new
    def new
      @user = User.new
      prepare_dependencies
    end

    # GET /users/1/edit
    def edit
      prepare_dependencies
    end

    # POST /users or /users.json
    def create
      prepare_dependencies
      @user = User.new(user_params)

      respond_to do |format|
        if @user.save
          # @user.confirm
          # @user.save
          format.html { redirect_to settings_users_url, notice: 'Utworzono pomyślnie.' }
          format.json { render :show, status: :created, location: @user }
        else
          format.html { render :new, status: :unprocessable_entity }
          format.json { render json: @user.errors, status: :unprocessable_entity }
        end
      end
    end

    # PATCH/PUT /users/1 or /users/1.json
    def update
      prepare_dependencies
      user_params_final = if params[:user][:password].blank?
                            user_params_update
                          else
                            user_params
                          end
      respond_to do |format|
        if @user.update_attributes(user_params_final)
          format.html { redirect_to settings_users_url, notice: 'Zaktualizowano pomyślnie.' }
          format.json { render :show, status: :ok, location: @user }
        else
          format.html { render :edit, status: :unprocessable_entity }
          format.json { render json: @user.errors, status: :unprocessable_entity }
        end
      end
    end

    # DELETE /users/1 or /users/1.json
    def destroy
      @user.destroy

      respond_to do |format|
        format.html { redirect_to settings_users_url, notice: 'Usunięto pomyślnie.' }
        format.json { head :no_content }
      end
    end

    private

    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    def prepare_dependencies
      @roles = Role.all
    end

    # Only allow a list of trusted parameters through.
    def user_params
      params.require(:user).permit(:email, :description, :password,
                                   :password_confirmation, role_ids: [])
    end

    def user_params_update
      params.require(:user).permit(:email, :description, role_ids: [])
    end
  end
end
