# frozen_string_literal: true

namespace :es do

desc 'Reset Index'
task reset: :environment do
  if repo.index_exists?
    puts "Deleting Index: #{repo.index}"
    repo.delete_index!
  end

  puts "Creating Index: #{repo.index}"
  repo.create_index!
end

desc 'Indexes models'
task index_models: :environment do
  repo.create_index!

  index_model 'Resources', Resource.tree.where.not(curriculum_type: 'subject')
  index_model 'Media    ', Resource.media
  index_model 'Generic  ', Resource.generic_resources
end

desc 'Load index'
task load: %i(environment index_models) do
  fpath = Rails.root.join('db', 'seeds', 'external_pages.json')
  pages = JSON.parse File.read(fpath)
  pages.each do |page_attrs|
    page = ExternalPage.new(page_attrs.symbolize_keys)
    repo.klass.build_from(page).index!
  end
end

def repo
  @repo ||= Search::Repository.new
end

def index_model(name, qset)
  pbar = ProgressBar.create title: "Indexing #{name}", total: qset.count

  qset.find_in_batches do |group|
    group.each do |item|
      repo.klass.build_from(item).index!
      pbar.increment
    end
  end
  pbar.finish
end

end