class Admin::Oauth::ApplicationsController < Admin::Controller
  def index
    render_success :ok, json: applications.map { |a| application_props(a) }
  end

  def show
    render_success :ok, json: application_props(application)
  end

  def create
    application = applications.build(application_params)

    if application.save
      render_success :ok, json: application_props(application)
    else
      render_error :unprocessable_entity, errors: application
    end
  end

  def update
    if application.update(application_params)
      render_success :ok, json: application_props(application)
    else
      render_error :unprocessable_entity, errors: application
    end
  end

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

  private
    def applications
      current_school.oauth_applications
    end

    def application
      @application ||= applications.find_by(id: params[:id])
    end

    def application_params
      params.permit(:name, :scopes, :active, :class_name_token)
    end

    def application_props(application)
      {}.tap do |props|
        props[:id] = application.id
        props[:name] = application.name
        props[:scopes] = application.scope_keys
        props[:active] = application.active
        props[:class_name_token] = application.class_name_token

        if action_name.to_sym == :show
          props[:client_id] = application.client_id
          props[:secret] = application.secret
        else
          props[:client_id] = "#{application.client_id[0..7]}***"
        end
      end
    end
end
