package com.bizofficer.teacher.dashboard;

import java.util.ArrayList;
import java.util.Arrays;
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.PgprepTestSummary;
import com.bizofficer.pojo.response.ListResponsePojo;
import com.bizofficer.util.system.MakeDate;


@Service
public class TeachDBService{
	
	private static final Logger logger = Logger.getLogger(TeachDBService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	public Object doExecute(Object obj) throws NotFoundException{
		BeanTeachDB objBean = (BeanTeachDB) obj; 
		ListResponsePojo responseObj = new ListResponsePojo();
		
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info( "schoolId >>> " +  objBean.getSchoolId() );
			logger.info( "subjectList >>> " +  objBean.getSubjectList() );
			logger.info( "classList >>> " +  objBean.getClassList() );

			if(objBean.getSchoolId()==null || objBean.getSubjectList()==null || objBean.getClassList()==null) {
				return responseObj;
			}
			
			List<TeachDBResponseBean> dataList = new ArrayList<TeachDBResponseBean>();
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			MakeDate dateObj = new MakeDate();
			
			TeachDBResponseBean serviceObj;
			
			logger.info( "schoolId >>> " +  objBean.getSchoolId() );
			logger.info( "subjectList >>> " +  objBean.getSubjectList() );
			logger.info( "classList >>> " +  objBean.getClassList() );
			
			List<String> classList = Arrays.asList(objBean.getClassList().split(","));
			List<String> subjectList = Arrays.asList(objBean.getSubjectList().split(","));

			TypedQuery<PgprepTestSummary> query = (TypedQuery<PgprepTestSummary>) entityManager.createQuery("from "+PgprepTestSummary.class.getName()+" where testStatus=1 AND testType=4 AND schoolId=?1 AND className IN (?2) AND subject IN (?3)  group by scheduleId order by id desc ", PgprepTestSummary.class);
//			TypedQuery<PgprepTestSummary> query = (TypedQuery<PgprepTestSummary>) entityManager.createQuery("from "+PgprepTestSummary.class.getName()+" where testStatus=1 AND testType=4 group by scheduleId order by id desc ", PgprepTestSummary.class);
			query.setParameter(1, objBean.getSchoolId());
			query.setParameter(2, classList  );
			query.setParameter(3, subjectList ); 
			query.setFirstResult(0);
			query.setMaxResults(100);
			List<?> resultListCat = query.getResultList();
			Iterator<?> iteratorCat=resultListCat.iterator();
			while(iteratorCat.hasNext()){
				PgprepTestSummary myObj = (PgprepTestSummary)iteratorCat.next();
				
				serviceObj = new TeachDBResponseBean();
				serviceObj.setScheduleId(myObj.getScheduleId());
				serviceObj.setTestTitle(myObj.getTestTitle());
				serviceObj.setClassName(myObj.getClassName());;
				
				if(myObj.getStartDate()!=null) {
					serviceObj.setTestDate(dateObj.dateToString(myObj.getStartDate(), "dd-MM-yyyy"));
				}
				
				dataList.add(serviceObj);
				
			}
			entityManager.getTransaction().commit();
			entityManager.close();
			
			responseObj.setList(dataList);
			
			responseObj.setResponseTxt("success");
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		///logger.info( "dataList >>> " +  dataList );
			
		return responseObj;
	}
	
	
	
}
