Rails.application.routes.draw do
  require 'sidekiq/web'

  devise_for :users,:controllers => { :omniauth_callbacks => "callbacks" }

  namespace :auth do
    mount_devise_token_auth_for 'User', skip: [:omniauth_callbacks]
  end

  root 'welcome#index'

  resource :feedback, only: [:create, :new] do
    get :new_bug
    post :report_bug
  end

  resources :subjects, only: [:index, :show]
  resource :complaints, only: ['create']

  resources :institutions do
    member do
      get :users
    end
  end

  resources :learning_objects do
    resources :build, controller: 'learning_objects/build'
    get :reviews, to: 'reviews#list', as: 'reviews'

    member do
      post :like
      get :collections
      get :upload
      get :download
    end
  end

  # file upload routes
  resource :chunk, only: [:create, :show]

  get '/collections/me' => 'collections#me', as: 'collections_me'
  resources :collections do
    get :reviews, to: 'reviews#list', as: 'reviews'

    member do
      # collection list
      get :list

      # change privacy
      post :change_privacy

      # add/remove a learning object for some collection
      post '/learning_objects/:learning_objects_ids', as: :add_learning_object, action: :add_learning_object
      delete '/learning_objects/:learning_objects_ids', as: :remove_learning_object, action: :remove_learning_object
    end
  end

  resources :reviews, except: :index do
    member do
      post :rate
    end
  end

  get '/bookmarks' => 'bookmarks#show', as: 'bookmark'
  get '/bookmarks/list' => 'bookmarks#list', as: 'list'
  post '/bookmarks/:type/:id' => 'bookmarks#add_object', as: :bookmark_add
  delete '/bookmarks/:type/:id' => 'bookmarks#remove_object', as: :bookmark_remove

  get '/users/verify_email' => 'users#verify_email', as: :verify_email
  get '/users/list' => 'users#list', as: :list_all_users
  resources :users, only: [:show] do
    member do
      post '/follow/:followable_type/:followable_id' => 'users#follow', as: :follow
      post '/unfollow/:followable_type/:followable_id' => 'users#unfollow', as: :unfollow
    end
  end

  get '/terms_of_service' => 'welcome#terms_of_service', as: 'terms_of_service'

  get '/about' => 'about#index', as: 'about'
  get '/links' => 'links#index', as: 'links'

  get '/search' => 'search#index', as: 'search'
  get '/search/fetch' => 'search#fetch', as: 'search_fetch'
  get '/autocomplete' => 'search#autocomplete'
  get '/search/get_class_size' => 'search#get_class_size', as: :get_class_size

  get '/subject/:id' => 'welcome#subject', as: 'subject_index'
  get '/add_file' => 'welcome#add_file'
  get '/signup' => 'welcome#signup'
  get '/follow_collection' => 'welcome#follow_collection'
  get '/file_outside_user' => 'welcome#file_outside_user'
end