class AppsController < ApplicationController
  skip_before_action :authenticate_request, only: [:show]

  def index
    authorize App

    folder_id = params[:folder]

    if folder_id.blank?
      @scope = App.where(organization: @current_user.organization)
    else
      @folder = Folder.find folder_id
      @scope = @folder.apps
    end

    @apps = @scope.order('created_at desc')
    .page(params[:page])
    .per(10)
    .includes(:user)

    @meta = { 
      total_pages: @apps.total_pages,
      folder_count: @scope.count,
      total_count: App.where(organization: @current_user.organization).count,
      current_page: @apps.current_page   
    }               
  end

  def create
    authorize App
    @app = App.create({
                        name: 'Untitled app',
                        organization: @current_user.organization,
                        current_version: AppVersion.new(name: 'v0'),
                        user: @current_user
                      })
    AppUser.create(app: @app, user: @current_user, role: 'admin')                      
  end

  def show
      @app = App.find params[:id]

      # Logic to bypass auth for public apps
      unless @app.is_public
          authenticate_request
          authorize @app
      end
  end

  def update
    @app = App.find params[:id]
    authorize @app
    @app.update(params['app'].permit('name', 'current_version_id', 'is_public'))
  end

  def users
    @app = App.find params[:app_id]
    @app_users = AppUser.where(app: @app).includes(:user)
  end
end
