package org.greenstone.gsdl3.util;


import org.apache.log4j.Logger;
import java.util.List;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;

import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

public class SolrTextWrapper
{

  static Logger logger =
        Logger.getLogger(SolrTextWrapper.class.getName());

  protected SolrClient solr_core = null;

  public SolrTextWrapper() {

  }

  public void setSolrCore(SolrClient solr_core) {
        this.solr_core = solr_core;
  }

  public boolean initialise() {

    if (this.solr_core == null) {
      logger.error("Solr core not loaded");
      return false;
    }
    
    return true;
  }

  public String getText(String docOID) {

    try {
      // docOID is unique, so we can do a filter query instead of a normal query (avoids scoring)
      SolrQuery query = new SolrQuery("*:*");
      query.addFilterQuery("docOID:"+docOID);
      query.setFields("TX");
      query.setRows(1);
      logger.error("doc retrieval for docOID "+docOID+" our query is: "+query.toString());
      QueryResponse response = solr_core.query(query);

      SolrDocumentList results = response.getResults();
      if (!results.isEmpty()) {
        SolrDocument doc = results.get(0);
        String text = "";
        text = (String)doc.getFieldValue("TX"); // single valued
        
        // if multivalued - make it single valued and change back
        //List<String> txValues = (List<String>) doc.getFieldValue("TX");
        
        //for (String tx : txValues) {
        //text = text + tx;
        //}
        return text;

      }
      logger.error("doc query results were empty!");
    } catch (Exception e) {
      logger.error("trying to retrieve doc content, error is "+e.getMessage());
      e.printStackTrace();
    }
    
    return null;
  }
  

}
