class Lookbook::ConfigStore

@api public
@ignore methods
Lookbook.config.ui_theme = :zinc
# Lookbook config access everywhere else:
config.lookbook.ui_theme = :zinc
# Lookbook config access in Rails config files:
@example :ruby
or dot-notation syntax.
Config option values can be get/set using hash property access syntax
Configuration store for Lookbook.

def self.default_config(env: Rails.env)

def self.default_config(env: Rails.env)
  ConfigLoader.call(CONFIG_FILE, env: env)
end

def self.init_from_config(env: Rails.env)

def self.init_from_config(env: Rails.env)
  new(default_config(env: env))
end

def get_favicon(theme)

def get_favicon(theme)
  default_favicon_path = Engine.root.join(DEFAULT_FAVICONS[theme])
  default_favicon = FileDataUriEncoder.call(default_favicon_path)
  if ui_favicon.present?
    if ui_favicon.is_a?(Hash)
      if ui_favicon[theme].is_a?(String)
        DataUriEncoder.call(ui_favicon[theme], "image/svg+xml")
      else
        default_favicon
      end
    elsif ui_favicon.is_a?(String)
      DataUriEncoder.call(ui_favicon, "image/svg+xml")
    else
      default_favicon
    end
  end
end

def highlighter_options=(options = nil)

def highlighter_options=(options = nil)
  store[:highlighter_options].merge!(options.to_h)
end

def initialize(config = nil)

def initialize(config = nil)
  @store = Store.new(config, recursive: true)
end

def listen_extensions=(extensions = nil)

def listen_extensions=(extensions = nil)
  store[:listen_extensions].push(*extensions.to_a).uniq!
end

def markdown_options=(options = nil)

def markdown_options=(options = nil)
  store[:markdown_options].merge!(options.to_h)
end

def page_extensions=(extensions = nil)

def page_extensions=(extensions = nil)
  store[:page_extensions].push(*extensions.to_a).uniq!
end

def preview_disable_error_handling=(value)

def preview_disable_error_handling=(value)
  store[:preview_disable_error_handling] = value
end

def preview_single_pass_rendering=(value)

def preview_single_pass_rendering=(value)
  store[:preview_single_pass_rendering] = value
end

def project_name

def project_name
  if store[:project_name].nil?
    if store[:project_logo].nil?
      Rails.application.class.module_parent.name.titleize
    else
      false
    end
  else
    store[:project_name]
  end
end

def project_name=(name)

def project_name=(name)
  store[:project_name] = name
end

def ui_favicon_dark

def ui_favicon_dark
  @_ui_favicon_dark ||= get_favicon(:dark)
end

def ui_favicon_light

def ui_favicon_light
  @_ui_favicon_light ||= get_favicon(:light)
end

def ui_theme=(name)

def ui_theme=(name)
  name = name.to_s
  if Theme.valid_theme?(name)
    store[:ui_theme] = name
  else
    raise ConfigError.new("'#{name}' is not a valid Lookbook theme. ", scope: "app.config")
  end
end

def ui_theme_overrides(&block)

def ui_theme_overrides(&block)
  if block
    yield store[:ui_theme_overrides]
  else
    store[:ui_theme_overrides]
  end
end