module Maglev

def config

rubocop:disable Metrics/MethodLength, Metrics/AbcSize
def config
  @config ||= config_klass.new.tap do |c|
    c.title = 'Maglev - EDITOR'
    c.favicon = nil
    c.logo = nil
    c.primary_color = '#040712'
    c.uploader = :active_storage
    c.site_publishable = false
    c.preview_host = nil
    c.asset_host = Rails.application.config.asset_host
    c.ui_locale = nil
    c.back_action = nil
    c.services = {}
    c.default_site_locales = [{ label: 'English', prefix: 'en' }]
    c.is_authenticated = ->(_site) { !Rails.env.production? }
    c.admin_username = nil # legacy config
    c.admin_password = nil # legacy config
    c.static_pages = []
    c.reserved_paths = []
    c.parent_controller = 'ApplicationController'
    c.tailwindcss_folders = []
    c.pagination = ::Maglev::DEFAULT_PAGINATION.dup
  end
end

def config_klass

def config_klass
  ::Maglev::Config
end

def configure

def configure
  config.tap do
    yield(config)
    config.reserved_paths = Maglev::ReservedPaths.new(config.reserved_paths)
    require_relative 'maglev/active_storage' if config.uploader == :active_storage
  end
end

def disable_theme_reloader

disable the theme reloader which is required by the Maglev SaaS plugin
def disable_theme_reloader
  @theme_reloader_disabled = true
end

def parent_controller_class

def parent_controller_class
  (config.parent_controller.presence || 'ApplicationController').constantize
end

def services(overrides = {})

def services(overrides = {})
  ::Maglev::AppContainer.new(config.services.merge(overrides)).call
end

def theme_reloader_enabled?

def theme_reloader_enabled?
  !@theme_reloader_disabled
end

def uploader

def uploader
  case config.uploader
  when Symbol then const_get("::Maglev::#{config.uploader.to_s.classify}")
  when String then const_get(config.uploader)
  when Class then config.uploader
  else
    raise "Invalid or not set uploader: #{config.uploader}"
  end
end

def uploader_proxy_controller_name

def uploader_proxy_controller_name
  config.uploader == :active_storage ? 'assets/active_storage_proxy' : 'assets/proxy'
end

def uuid_as_primary_key?

def uuid_as_primary_key?
  return @uuid_as_primary_key unless @uuid_as_primary_key.nil?
  config = Rails.configuration.generators
  @uuid_as_primary_key = config.options[config.orm][:primary_key_type] == :uuid
end