# frozen_string_literal: true

require "securerandom"
require "digest"
Rails.env = ENV["RAILS_ENV"] || "test"

module Combustion
  class Application < Rails::Application
    CONFIGURERS = [
      Combustion::Configurations::ActiveRecord,
      Combustion::Configurations::ActionController,
      Combustion::Configurations::ActionMailer,
      Combustion::Configurations::ActiveStorage
    ].freeze

    version = Rails.version.to_f

    # Core Settings
    config.cache_classes               = true
    config.consider_all_requests_local = true
    config.eager_load                  = Rails.env.production?

    config.secret_key_base = SecureRandom.hex if version >= 4.0
    config.whiny_nils      = true             if version < 4.0
    config.secret_token = Digest::SHA1.hexdigest Time.now.to_s if version < 5.2

    # ActiveSupport Settings
    config.active_support.deprecation = :stderr

    # Some settings we're not sure if we want, so let's not load them by
    # default. Instead, wait for this method to be invoked (to get around
    # load-order complications).
    def self.configure_for_combustion
      config.root = File.expand_path File.join(Dir.pwd, Combustion.path)

      CONFIGURERS.each { |configurer| configurer.call config }

      config.assets.enabled = true if defined?(Sprockets)
    end

    initializer(
      :load_customized_environment_for_combustion,
      :before => :load_environment_config,
      :group  => :all
    ) do
      next unless Combustion.setup_environment

      Combustion::Application.class_eval(&Combustion.setup_environment)
    end
  end
end
