package com.bizofficer.teacher.classes;



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 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.PgprepSchoolClasses;

@Service
public class ClassesTeacherService{
	
	private static final Logger logger = Logger.getLogger(ClassesTeacherService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	public Object execute(Object obj) throws NotFoundException{
		ClassesRequest objBean = (ClassesRequest) obj;
		ClassesTeacherResponse responseObj = new ClassesTeacherResponse();
		
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("Keyword >> " + objBean.getKeyword() );
			
			logger.info("*********************Classes******************************");
			
			List<ClassesTeacherResponseBean> responseListObj = new ArrayList<ClassesTeacherResponseBean>();
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			String whereQry ="";				
			if(objBean.getKeyword()!=null && objBean.getKeyword().length()>0 ) {
				whereQry +=" AND (className LIKE :keyword) ";
			}
			TypedQuery<PgprepSchoolClasses> query = (TypedQuery<PgprepSchoolClasses>) entityManager.createQuery("from "+PgprepSchoolClasses.class.getName()+" WHERE schoolId=:schoolId "+whereQry+" order by className ", PgprepSchoolClasses.class);
			query.setParameter("schoolId", objBean.getSchoolId());
			if(objBean.getKeyword()!=null && objBean.getKeyword().length()>0 ) {
				query.setParameter("keyword", "%"+objBean.getKeyword()+"%");
			}
			query.setFirstResult(0);
			query.setMaxResults(500);
			List<?> resultList = query.getResultList();
			logger.info("Classes resultList Count: "+resultList.size());
			Iterator<?> iterator=resultList.iterator();	
			ClassesTeacherResponseBean responseBeanObj;
			int i=1;
			while(iterator.hasNext()){
				PgprepSchoolClasses myObj = (PgprepSchoolClasses)iterator.next();		
				
				responseBeanObj = new ClassesTeacherResponseBean();
				responseBeanObj.setId(i);
				responseBeanObj.setAutoId(myObj.getId());
				responseBeanObj.setClassName(myObj.getClassName());
				responseBeanObj.setCourseId(myObj.getCourseId());
				responseBeanObj.setCourseTitle(myObj.getCourseTitle());
				responseBeanObj.setOrganisationId(myObj.getOrganisationId());
				
				responseListObj.add(responseBeanObj);
				i++;
			}

			logger.info("Classes Count: "+responseListObj.size());
			
			responseObj.setList(responseListObj);
				
			entityManager.getTransaction().commit();
			entityManager.close();
			
			responseObj.setResponseTxt("success");
		        
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
