/*
 *    Copyright (c) Sematext International
 *    All Rights Reserved
 *
 *    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Sematext International
 *    The copyright notice above does not evidence any
 *    actual or intended publication of such source code.
 */
package com.sematext.solr.handler.component;

import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.component.ReSearcherHandler;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.handler.component.SearchComponent;
import org.apache.solr.handler.component.ShardHandlerFactory;

import java.util.List;

public class ReSearcherRequestContext {
  private ModifiableSolrParams params;
  private String originalQueryString;
  private long originalQueryHits;
  
  private String correctedQuery;
  private long correctedQueryHits;
  private ReSearcherHandler handler;
  
  private SolrCore core;
  private List<SearchComponent> queryOnlyComponents;
  private ShardHandlerFactory shardHandlerFactory;
  
  public ReSearcherRequestContext(ResponseBuilder rb) {
    params = new ModifiableSolrParams(rb.req.getParams());
    originalQueryString = rb.getQueryString();
    originalQueryHits = ReSearcherUtils.extractOriginalQueryHits(rb);
  }

  
  public void restoreContext(ResponseBuilder rb) {
    rb.req.setParams(params);
    rb.setQueryString(originalQueryString);
  }
  
  public String getCorrectedQuery() {
    return correctedQuery;
  }
  
  public void setCorrectedQuery(String correctedQuery) {
    this.correctedQuery = correctedQuery;
  }
  
  public String getOriginalQueryString() {
    return originalQueryString;
  }
  
  public long getOriginalQueryHits() {
    return originalQueryHits;
  }

  public long getCorrectedQueryHits() {
    return correctedQueryHits;
  }

  public void setCorrectedQueryHits(long correctedQueryHits) {
    this.correctedQueryHits = correctedQueryHits;
  }
  
  public ModifiableSolrParams getParams() {
    return params;
  }
  
  public ReSearcherHandler getHandler() {
    if (handler == null) {
      handler = new ReSearcherHandler();
    }
    return handler;
  }


  public SolrCore getCore() {
    return core;
  }


  public void setCore(SolrCore core) {
    this.core = core;
  }


  public List<SearchComponent> getQueryOnlyComponents() {
    return queryOnlyComponents;
  }


  public void setQueryOnlyComponents(List<SearchComponent> queryOnlyComponents) {
    this.queryOnlyComponents = queryOnlyComponents;
  }


  public ShardHandlerFactory getShardHandlerFactory() {
    return shardHandlerFactory;
  }


  public void setShardHandlerFactory(ShardHandlerFactory shardHandlerFactory) {
    this.shardHandlerFactory = shardHandlerFactory;
  }
}