package com.bizofficer.teacher.schedule;

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.PgprepScheduleClassTest;
import com.bizofficer.pojo.response.ListResponsePojo;
import com.bizofficer.util.system.MakeDate;


@Service
public class ScheduleService{
	
	private static final Logger logger = Logger.getLogger(ScheduleService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	public Object doExecute(Object obj) throws NotFoundException{
		BeanSchedule objBean = (BeanSchedule) obj; 	
		ListResponsePojo responseObj = new ListResponsePojo();
				
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info( "ScheduleService schoolId >>> " +  objBean.getSchoolId() );
			logger.info( "ScheduleService LoginId >>> " +  objBean.getLoginId() );
		
			if(objBean.getSchoolId()==null || objBean.getLoginId()==null) {
				return responseObj;
			}
			
			List<ScheduleResponseBean> dataList = new ArrayList<ScheduleResponseBean>();
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			ScheduleResponseBean serviceObj;
			MakeDate mkdate = new MakeDate();

//			List<String> classList = Arrays.asList(objBean.getClassList().split(","));
//			List<String> subjectList = Arrays.asList(objBean.getSubjectList().split(","));
			
			TypedQuery<PgprepScheduleClassTest> query = (TypedQuery<PgprepScheduleClassTest>) entityManager.createQuery("from "+PgprepScheduleClassTest.class.getName()+" where date(testDateTime)>=CURDATE() AND schoolId=?1 AND createdById=?2 order by id desc ", PgprepScheduleClassTest.class);
			query.setParameter(1, objBean.getSchoolId());
			query.setParameter(2, objBean.getLoginId());
			List<?> resultListCat = query.getResultList();
			Iterator<?> iteratorCat=resultListCat.iterator();
			int i=1;
			while(iteratorCat.hasNext()){
				PgprepScheduleClassTest myObj = (PgprepScheduleClassTest)iteratorCat.next();
				
				serviceObj = new ScheduleResponseBean();
				serviceObj.setId(i);
				serviceObj.setAutoId(myObj.getId());
				serviceObj.setScheduleId(myObj.getScheduleId());
				serviceObj.setTestTitle(myObj.getTestTitle());
				serviceObj.setQuestionType(myObj.getQuestionType());
				serviceObj.setClassName(myObj.getClassName());
				serviceObj.setTopicId(0);
				serviceObj.setSubject(myObj.getSubject());
								
				if(myObj.getTestDateTime()!=null) {
					serviceObj.setTestDateTime(mkdate.changeDateTimeFormat(myObj.getTestDateTime(), "yyyy-MM-dd HH:mm:ss"));
				}
				
				serviceObj.setTopicTestId(myObj.getTopicTestId());
				serviceObj.setTotalQuestion(myObj.getTotalQuestion());
				serviceObj.setTotalTime(myObj.getTotalTime());
				serviceObj.setTotalMark(myObj.getTotalMark());
				serviceObj.setMarkCorrectAns(myObj.getMarkCorrectAns());
				serviceObj.setMarkIncorrectAns(myObj.getMarkIncorrectAns());
				serviceObj.setMarkNotAttempt(myObj.getMarkNotAttempt());
				serviceObj.setCreatedById(myObj.getCreatedById());
				
				dataList.add(serviceObj);
				i++;
				
			}
			
			responseObj.setList(dataList);
			
			entityManager.getTransaction().commit();
			entityManager.close();
			
			responseObj.setResponseTxt("success");
			
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		///logger.info( "dataList >>> " +  dataList );
			
		return responseObj;
	}
	
	
	
}
