class Support::UsersController < Support::ApplicationController
  skip_before_action :require_permissions!, only: :index

  def index
    render_success :ok, json: users.map { |u| user_props(u) }
  end

  def show
    render_success :ok, json: user_props(user)
  end

  def create
    @user = users.build(user_params)
    if @user.save
      render_success :ok, json: user_props(@user)
    else
      render_error :unprocessable_entity, errors: user
    end
  end

  def update
    if user.update(user_params)
      render_success :ok, json: user_props(user)
    else
      render_error :unprocessable_entity, errors: user
    end
  end

  def destroy
    if user.destroy
      render_success :ok
    else
      render_error :unprocessable_entity, errors: user
    end
  end

  private
    def users
      Support::User.all.active(params[:flag]).ordered
    end

    def user
      @user ||= users.find_by(id: params[:id])
    end

    def user_params
      params.permit(
        :first_name,
        :last_name,
        :username,
        :active,
        :password,
        :password_confirmation,
        :email,
        :freshdesk_api_key
      )
    end

    def user_props(user)
      {
        id: user.id,
        full_name: user.full_name(:reverse),
        first_name: user.first_name,
        last_name: user.last_name,
        username: user.username,
        active: user.active,
        email: user.email,
        freshdesk_api_key: user.freshdesk_api_key
      }
    end

    def area
      'users'
    end
end
