# Need to sub-class CatalogController so we get all other plugins behavior
# for our own "inside a search context" lookup of facets. 
class AdvancedController < CatalogController
  include AdvancedHelper # so we get the #advanced_search_context method
  
  before_filter :setup_advanced_search_css, :setup_advanced_search_js, :only => :index
  
  def index
    unless request.method==:post
      @response = get_advanced_search_facets
    end
  end

  protected
  def get_advanced_search_facets
    
    search_context_params = {}
    if (advanced_search_context.length > 0 )
      # We have a search context, need to fetch facets from within
      # that context -- but we dont' want to search within any
      # existing :q or ADVANCED facets, so we remove those params.
      adv_keys = BlacklightAdvancedSearch.config[:search_fields].collect {|d| d[:key].to_sym}
      trimmed_params = params.reject do |k,v|        
        adv_keys.include?(k.to_sym) # the individual q params
      end
      trimmed_params.delete(:f_inclusive) # adv facets
      
      search_context_params = solr_search_params(trimmed_params)
      # Don't want to include the 'q' from basic search in our search
      # context. Kind of hacky becuase solr_search_params insists on
      # using controller.params, not letting us over-ride. 
      search_context_params.delete(:q)
      search_context_params.delete("q")
      
      # Also delete any facet-related params, or anything else
      # we want to set ourselves or inherit from Solr request handler
      # defaults. 
      search_context_params.delete_if do |k, v|
        k = k.to_s
        (["facet.limit", "facet.sort", "f", "facets", "facet.fields", "qt", "per_page"].include?(k) ||                
          k =~ /f\..+\.facet\.limit/ ||
          k =~ /f\..+\.facet\.sort/
        )        
      end
    end

    input = HashWithIndifferentAccess.new
    input.merge!( search_context_params )
    input.merge!( :qt => BlacklightAdvancedSearch.config[:qt] , :per_page => 0)
    input.merge!( BlacklightAdvancedSearch.config[:form_solr_parameters] )
    input[:q] ||= '{!lucene}*:*'
    
    
    Blacklight.solr.find(input.to_hash)
  end
  def setup_advanced_search_css
    stylesheet_links << ["blacklight_advanced_search_styles", {:plugin=>:blacklight_advanced_search}]
  end
  def setup_advanced_search_js
    javascript_includes << ["blacklight_advanced_search_javascript", {:plugin=>:blacklight_advanced_search}]
  end
end