module ThinkingSphinx::Deltas::ResqueDelta::IndexUtils
  extend self

  # Public: Return a list of index prefixes (i.e. without "_core"/"_delta").
  #
  # Examples
  #
  #   sphinx_indices
  #   # => ['foo', 'bar']
  #
  # Returns an Array of index prefixes.
  def index_prefixes
    @prefixes ||= indices.reject { |i| i =~ /_(core|delta)$/ }
  end

  def core_indices
    @core_indices ||= indices.select { |i| i =~ /_core$/ }
  end

  def delta_indices
    @delta_indices ||= indices.select { |i| i =~ /_delta$/ }
  end

  def reload!
    @ts_config = @indices = @prefixes = @core_indices = @delta_indices = nil
  end

  def delta_to_core(delta_name)
    delta_name.sub(/_delta$/, '_core')
  end

  def core_to_delta(core_name)
    core_name.sub(/_core$/, '_delta')
  end

  def ts_config
    @ts_config ||= ThinkingSphinx::Configuration.instance.tap do |config|
      config.generate
    end
  end

  private
  def indices
    @indices ||= ts_config.configuration.indices.collect { |i| i.name }
  end

end