package com.manfrotto.web.search;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.log4j.Logger;
import org.jahia.bin.Jahia;
import org.jahia.content.ContentDefinition;
import org.jahia.content.JahiaObject;
import org.jahia.content.ObjectKey;
import org.jahia.data.containers.JahiaContainer;
import org.jahia.data.containers.JahiaContainerDefinition;
import org.jahia.data.containers.JahiaContentContainerFacade;
import org.jahia.data.search.JahiaSearchHit;
import org.jahia.data.search.JahiaSearchResult;
import org.jahia.exceptions.JahiaException;
import org.jahia.params.ParamBean;
import org.jahia.params.ProcessingContext;
import org.jahia.registries.ServicesRegistry;
import org.jahia.services.categories.CategoryService;
import org.jahia.services.containers.ContainerFactoryProxy;
import org.jahia.services.containers.ContentContainer;
import org.jahia.services.containers.JahiaContainersBaseService;
import org.jahia.services.containers.JahiaContainersService;
import org.jahia.services.pages.ContentPage;
import org.jahia.services.pages.JahiaPage;
import org.jahia.services.pages.JahiaPageService;
import org.jahia.services.search.ContainerSearchResultBuilderImpl;
import org.jahia.services.search.JahiaSearchResultBuilder;
import org.jahia.services.search.JahiaSearchService;
import org.jahia.services.search.PageSearchResultBuilderImpl;
import org.jahia.services.search.SearchHandler;
import org.jahia.services.search.lucene.JahiaHitCollector;

import com.manfrotto.web.beans.SearchResultBean;
import com.manfrotto.web.products.avenger.ProductsDetailsAvenger;


public class Search {

	static Logger log = Logger.getLogger(Search.class);
	
	public static List<SearchResultBean> getListSearchResultsBean(ParamBean jParams, String searchKey) {

		String idm = "search ()";
		
		searchKey = searchKey.trim();
		
		List<SearchResultBean> searchResultsBean = new ArrayList<SearchResultBean>();
		
		ArrayList languageCodes = new ArrayList ();	
		String currlangcode = jParams.getCurrentLocale().toString();
		languageCodes.add(currlangcode);		
		
		JahiaSearchService jahiaSearchService = ServicesRegistry.getInstance().getJahiaSearchService();		
        JahiaSearchResultBuilder resultBuilder = new PageSearchResultBuilderImpl();
        
        int maxhit = Jahia.getSettings().getSearchMaxHits();
        resultBuilder.setHitCollector(new JahiaHitCollector(false, -1, maxhit, -1, -1, false, true));
        resultBuilder.getHitCollector().setSearchResultBuilder(resultBuilder);

        try {
        	
			JahiaSearchResult searchResults = jahiaSearchService.search(jParams.getSiteID(), StringEscapeUtils.unescapeHtml(searchKey), jParams, languageCodes, resultBuilder);
			int totalHits = searchResults.getHitCount();			 

			for(int i = 0; i < searchResults.results().size(); i++) {
				
				JahiaSearchHit thisHit = (JahiaSearchHit)searchResults.results().get(i);
				
				int pageId = thisHit.getPageId();
				JahiaPage jPage = ServicesRegistry.getInstance().getJahiaPageService().lookupPage(pageId);
				
				String title = jPage.getTitle();
				String description = thisHit.getTeaser();
				String url = jPage.getURL(jParams);
				float score = thisHit.getScore();
			
				if (title==null || "".equals(title)) {
					title = description.substring(0,30);
				}
				
				SearchResultBean bean = new SearchResultBean();
				bean.setTitle(title);
				bean.setDescription(description);
				bean.setScore(score);
				bean.setUrl(url);
				
				searchResultsBean.add(bean);

			}

			
		} catch (JahiaException e) {
			// TODO Auto-generated catch block
			log.error(idm + " JahiaException = ["+e+"]", e);
		}
		
		
		if (searchResultsBean.size()==0) {
			log.debug(idm + " SET searchResultsBean = null");
			searchResultsBean = null;
		}
		
		return searchResultsBean;
        
	}
}
