# frozen_string_literal: true

require 'highline/import'

# consumers
FactoryBot.create(:consumer)
FactoryBot.create(:consumer, name: 'openSAP')
# The following consumer is preconfigured in Xikolo for local development
FactoryBot.create(:consumer, name: 'Xikolo Development', oauth_key: 'consumer', oauth_secret: 'secret')

# users
# Set default_url_options explicitly, required for rake task
Rails.application.routes.default_url_options = Rails.application.config.action_mailer.default_url_options
UserMailer.delivery_method = :test
admin = FactoryBot.create(:admin, study_groups: StudyGroup.all)
teacher = FactoryBot.create(:teacher, email: 'teacher@example.org', study_groups: StudyGroup.all)
FactoryBot.create(:learner, email: 'learner@example.org', study_groups: StudyGroup.all)
external_user = FactoryBot.create(:external_user, study_groups: StudyGroup.all)

# file types
FileType.create_factories user: admin

# execution environments
ExecutionEnvironment.skip_callback(:commit, :after, :sync_runner_environment)
ExecutionEnvironment.create_factories user: admin

# exercises
@exercises = find_factories_by_class(Exercise).map(&:name).index_with {|factory_name| FactoryBot.create(factory_name, user: teacher) }

# submissions
FactoryBot.create(:submission, exercise: @exercises[:fibonacci], contributor: external_user)

# The old images included in the seed data do not feature a dedicated `user` and therefore require a privileged execution.
ExecutionEnvironment.update_all privileged_execution: true # rubocop:disable Rails/SkipsModelValidations

say(<<~CONFIRMATION_MESSAGE)
  Development data has been seeded successfully.

  As part of this setup, some execution environments have been \
  stored in the database. However, these haven't been yet \
  synchronized with a runner management. Please take care \
  to configure a runner management according to the \
  documentation and synchronize environments through the \
  user interface. To do so, open `/execution_environments` \
  and click on the "Synchronize all" button.
CONFIRMATION_MESSAGE
