/*
 *    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.autocomplete.solr.group;


import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.SpatialParams;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.search.DocList;
import org.apache.solr.search.DocListAndSet;

public class LocationGroupingHandler extends GroupingHandler {

  private final String fq;
  private final String distance;
  private final String sfield;

  public LocationGroupingHandler(String fieldName, String groupName, SolrParams additionalComponentParams) {
    super(fieldName, groupName, additionalComponentParams);
    fq = getAdditionalComponentParams().get(CommonParams.FQ);
    distance = getAdditionalComponentParams().get(SpatialParams.DISTANCE);
    sfield = getAdditionalComponentParams().get(SpatialParams.FIELD);
  }

  @Override
  public void prepareGroupQueryParams(ModifiableSolrParams params) {

    String pt = params.get(SpatialParams.POINT);
    if (pt == null) {
      return;
    }

    params.add(SpatialParams.POINT, pt);
    params.add(CommonParams.FQ, fq);
    params.add(SpatialParams.FIELD, sfield);

    // Use distance from config if not available in the request
    String d = params.get(SpatialParams.DISTANCE);
    if (d == null) {
      params.add(SpatialParams.DISTANCE, distance);
    }
  }

  @Override
  public DocListAndSet postProcessResult(ResponseBuilder rb, DocList originalResult) {
    // TODO Auto-generated method stub
    return null;
  }
  
  @Override
  public DocListAndSet postProcessDistributedResult(ResponseBuilder rb, SolrDocumentList originalResult) {
    // TODO Auto-generated method stub
    return null;
  }

}