package com.bizofficer.apiweb.studymaterials;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;
import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.crossstore.ChangeSetPersister.NotFoundException;
import org.springframework.stereotype.Service;

import com.bizofficer.hibernate.entity.PgprepKeywordContent;
import com.bizofficer.hibernate.entity.PgprepTopicContent;


@Service
public class HelpContentService{
	
	private static final Logger logger = Logger.getLogger(HelpContentService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	DataSource appDataSource;
	
	public List<TopicContentBean> doExecute(Object obj) throws NotFoundException{
		BeanTC objBean = (BeanTC) obj; 	
		List<TopicContentBean> dataList = new ArrayList<TopicContentBean>();
		
		try {

			logger.info("Content Search By Template Id >> " + objBean.getTemplateId() );
			logger.info("Content Search Query >> " + objBean.getSearchQuery() );
			logger.info("Content Search Flag >> " + objBean.getSearchFlag() );
			logger.info("Content Topic Id >> " + objBean.getTopicId() );
			
			if(objBean.getTemplateId()==null || objBean.getTemplateId()<1 || objBean.getSearchFlag()==null) {
				return dataList;
			}
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			if(objBean.getSearchFlag()!=null && "Keyword".equals(objBean.getSearchFlag()) && objBean.getSearchQuery()!=null && objBean.getSearchQuery().length()>0 ) {
				dataList = this.searchByKeyword(objBean, entityManager);	
				
			}else if(objBean.getSearchFlag()!=null && "Topic".equals(objBean.getSearchFlag()) && objBean.getSearchQuery()!=null && objBean.getSearchQuery().length()>0 ) {
				dataList = this.searchByTopic(objBean, entityManager);	
				
			}	
			
			
			entityManager.getTransaction().commit();
			entityManager.close();
			
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		return dataList;
		
	}

	public List<TopicContentBean> searchByTopic(BeanTC objBean, EntityManager entityManager) throws NotFoundException{
		List<TopicContentBean> dataList = new ArrayList<TopicContentBean>();
		
		try {
			
			logger.info("Search By Topic: " );
			
			String whereQry="";
			
			if(objBean.getTopicId()!=null && objBean.getTopicId()>0) {
				whereQry=" WHERE topicId=:topicId ";
			}else if(objBean.getSearchQuery()!=null && objBean.getSearchQuery().length()>0 ) {
				whereQry=" WHERE topicName=:topicName ";
			}
			
			TypedQuery<PgprepTopicContent> query = (TypedQuery<PgprepTopicContent>) entityManager.createQuery("from "+PgprepTopicContent.class.getName()+whereQry+" order by contentType desc ", PgprepTopicContent.class);
			
			if(objBean.getTopicId()!=null && objBean.getTopicId()>0) {
				query.setParameter("topicId", objBean.getTopicId() );
			}else if(objBean.getSearchQuery()!=null && objBean.getSearchQuery().length()>0 ) {
				query.setParameter("topicName", objBean.getSearchQuery() );
			}
			
			query.setFirstResult(0);
			query.setMaxResults(200);
			TopicContentBean topicContentBeanObj;
			List<?> resultList = query.getResultList();
			Iterator<?> iterator=resultList.iterator();			
			while(iterator.hasNext()){
				PgprepTopicContent myObjCors = (PgprepTopicContent)iterator.next();
				
				topicContentBeanObj = new TopicContentBean();
				topicContentBeanObj.setId(myObjCors.getId());
				topicContentBeanObj.setContentTitle(myObjCors.getContentName());
				topicContentBeanObj.setContentType(myObjCors.getContentType());
				topicContentBeanObj.setContentUrl(myObjCors.getContentUrl());
				topicContentBeanObj.setDescription(myObjCors.getDescription());
				
				dataList.add(topicContentBeanObj);
				
			}
            
            
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		return dataList;
		
	}
	
	
	public List<TopicContentBean> searchByKeyword(BeanTC objBean, EntityManager entityManager) throws NotFoundException{
		List<TopicContentBean> dataList = new ArrayList<TopicContentBean>();
		
		try {
			
			logger.info("Search By Keyword: " );

			String whereQry="";
			if(objBean.getTopicId()!=null && objBean.getTopicId()>0) {
				whereQry=" WHERE keywordId=:keywordId ";
			}else if(objBean.getSearchQuery()!=null && objBean.getSearchQuery().length()>0 ) {
				whereQry=" WHERE keywordName=:keywordName ";
			}			
			TypedQuery<PgprepKeywordContent> query = (TypedQuery<PgprepKeywordContent>) entityManager.createQuery("from "+PgprepKeywordContent.class.getName()+whereQry+" order by contentType desc ", PgprepKeywordContent.class);
			if(objBean.getTopicId()!=null && objBean.getTopicId()>0) {
				query.setParameter("keywordId", objBean.getTopicId() );
			}else if(objBean.getSearchQuery()!=null && objBean.getSearchQuery().length()>0 ) {
				query.setParameter("keywordName", objBean.getSearchQuery() );
			}
			query.setFirstResult(0);
			query.setMaxResults(200);
			TopicContentBean topicContentBeanObj;
			List<?> resultList = query.getResultList();
			Iterator<?> iterator=resultList.iterator();			
			while(iterator.hasNext()){
				PgprepKeywordContent myObjCors = (PgprepKeywordContent)iterator.next();
				
				topicContentBeanObj = new TopicContentBean();
				topicContentBeanObj.setId(myObjCors.getId());
				topicContentBeanObj.setContentTitle(myObjCors.getContentName());
				topicContentBeanObj.setContentType(myObjCors.getContentType());
				topicContentBeanObj.setContentUrl(myObjCors.getContentUrl());
				topicContentBeanObj.setDescription(myObjCors.getDescription());
				
				dataList.add(topicContentBeanObj);
				
			}
            
            
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		return dataList;
		
	}
	

	


	
	
}
