package com.bizofficer.apiweb.liveclass;

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.PgprepLiveClasses;
import com.bizofficer.hibernate.entity.PgprepStudentDetails;
import com.bizofficer.hibernate.repository.PgprepStudentDetailsRepository;
import com.bizofficer.util.system.MakeDate;


@Service
public class LiveClassService{
	
	private static final Logger logger = Logger.getLogger(LiveClassService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepStudentDetailsRepository psdRepo;
	
	public Object doExecute(BeanLiveClass objBean) throws NotFoundException{
		LiveClassRespBeans resObj = new LiveClassRespBeans();
		
		try {
			
			resObj.setResponseTxt("failed");
			
			logger.info( "LiveClassService Student Id >>> " +  objBean.getStudentId() );

			if(objBean.getStudentId()==null ) {
				return resObj;
			}
			
			PgprepStudentDetails studObj = (PgprepStudentDetails) psdRepo.findIdByStudentId(objBean.getStudentId());
			if(studObj==null) {
				return resObj;
			}

			logger.info("Verified ID: " + studObj.getId() );
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			LiveClassBeans serviceObj;
			MakeDate mkdate = new MakeDate();
			List<LiveClassBeans> dataList = new ArrayList<LiveClassBeans>();
			
			TypedQuery<PgprepLiveClasses> query = (TypedQuery<PgprepLiveClasses>) entityManager.createQuery("from "+PgprepLiveClasses.class.getName()+" where date(startTime)=CURDATE() AND time(startTime)<=CURTIME() AND ((TIME_TO_SEC(CURTIME()) - TIME_TO_SEC(startTime))/60)<=duration AND status=1 AND schoolId=:schoolId AND className=:className order by id desc ", PgprepLiveClasses.class);
			query.setParameter("schoolId", studObj.getSchoolId());
			query.setParameter("className", studObj.getClassName());
			query.setFirstResult(0);
			query.setMaxResults(50);
			List<?> resultListCat = query.getResultList();
			Iterator<?> iteratorCat=resultListCat.iterator();
			int i=1;
			while(iteratorCat.hasNext()){
				PgprepLiveClasses myObj = (PgprepLiveClasses)iteratorCat.next();
				
				serviceObj = new LiveClassBeans();
				serviceObj.setId(i);
				serviceObj.setAutoId(myObj.getId());
				
				serviceObj.setDuration(myObj.getDuration());
				serviceObj.setSubject(myObj.getSubject());
				serviceObj.setMeetingNumber(myObj.getMeetingNumber());
				serviceObj.setMeetingPassword(myObj.getMeetingPassword());
				serviceObj.setNote(myObj.getNote());
				
				if(myObj.getStartTime()!=null) {
					serviceObj.setStartTime(mkdate.changeDateTimeFormat(myObj.getStartTime(), "yyyy-MM-dd HH:mm:ss"));
				}
								
				
				dataList.add(serviceObj);
				i++;
				
			}
			
			if(dataList!=null && dataList.size()>0) {
				logger.info("Total Live Class Found: " + dataList.size() );
			}
			
			resObj.setList(dataList);
			
			resObj.setResponseTxt("success");
			
			entityManager.getTransaction().commit();
			entityManager.close();
			
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		///logger.info( "dataList >>> " +  dataList );
			
		return resObj;
	}
	
	
	
}
