package com.bizofficer.teacher.scheduleliveclass;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
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.PgprepTeachers;
import com.bizofficer.hibernate.repository.PgprepTeachersRepository;
import com.bizofficer.util.system.MakeDate;


@Service
public class LiveClassTeachService{
	
	private static final Logger logger = Logger.getLogger(LiveClassTeachService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepTeachersRepository teachRepo;
	
	public Object doExecute(Object obj) throws NotFoundException{
		BeanLiveClassTeach objBean = (BeanLiveClassTeach) obj; 	
		LiveClassTeachResponseBean responseObj = new LiveClassTeachResponseBean();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info( "schoolId >>> " +  objBean.getSchoolId() );
			logger.info( "LoginId >>> " +  objBean.getLoginId() );
			logger.info( "Token >>> " +  objBean.getToken() );
		
			if(objBean.getSchoolId()==null || objBean.getLoginId()==null || objBean.getToken()==null) {
				return responseObj;
			}
			
			PgprepTeachers teachObj = (PgprepTeachers) teachRepo.getIdBySchoolIdAndLoginIdAndLoginToken(objBean.getSchoolId(), objBean.getLoginId(), objBean.getToken());
			if(teachObj==null) {
				return responseObj;
			}

			logger.info("Verified ID: " + teachObj.getId() );
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			MakeDate mkdate = new MakeDate();
			LiveClassBeanTeach serviceObj;
			List<LiveClassBeanTeach> dataList = new ArrayList<LiveClassBeanTeach>();

			TypedQuery<PgprepLiveClasses> query = (TypedQuery<PgprepLiveClasses>) entityManager.createQuery("from "+PgprepLiveClasses.class.getName()+" where teacherId=:teacherId order by id desc ", PgprepLiveClasses.class);
			query.setParameter("teacherId", teachObj.getId());
			query.setFirstResult(0);
			query.setMaxResults(100);
			List<?> resultListCat = query.getResultList();
			Iterator<?> iteratorCat=resultListCat.iterator();
			int i=1;
			while(iteratorCat.hasNext()){
				PgprepLiveClasses myObj = (PgprepLiveClasses)iteratorCat.next();

				serviceObj = new LiveClassBeanTeach();
				serviceObj.setId(i);
				serviceObj.setAutoId(myObj.getId());
				serviceObj.setDuration(myObj.getDuration());
				serviceObj.setClassName(myObj.getClassName());
				serviceObj.setSubject(myObj.getSubject());
				serviceObj.setMeetingNumber(myObj.getMeetingNumber());
				serviceObj.setMeetingPassword(myObj.getMeetingNumber());
				serviceObj.setNote(myObj.getNote());
				
				if(myObj.getModifiedDateTime()!=null) {
					serviceObj.setModifiedDateTime(mkdate.changeDateTimeFormat(myObj.getModifiedDateTime(), "yyyy-MM-dd HH:mm"));
				}
				
				if(myObj.getStartTime()!=null) {
					serviceObj.setStartTime(mkdate.changeDateTimeFormat(myObj.getStartTime(), "yyyy-MM-dd HH:mm:ss"));
				}
				
				if(myObj.getStatus()!=null && myObj.getStatus()==1) {
					serviceObj.setStatus("Active");
				}else {
					serviceObj.setStatus("Not Active");
				}
				
				if(myObj.getStartTime()!=null && myObj.getDuration()!=null) {
					Timestamp meetingTime = mkdate.addMinuteToTime(mkdate.changeDateTimeFormat(myObj.getStartTime(), "yyyy-MM-dd HH:mm:ss"), myObj.getDuration() );
					Timestamp currentTime = new Timestamp(new Date().getTime());
					logger.info( "Expire Meeting Time: " +  meetingTime );
					logger.info( "currentTime: " +  currentTime );					
					if(currentTime.compareTo(meetingTime)>0) {
						serviceObj.setStatus("Not Active");
					}
				}
				
				logger.info( "LiveClass Status: " +  serviceObj.getStatus() );
				
				dataList.add(serviceObj);
				i++;
				
			}
			
			responseObj.setList(dataList);
			
			responseObj.setResponseTxt("success");
			
			entityManager.getTransaction().commit();
			entityManager.close();
			
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		///logger.info( "dataList >>> " +  dataList );
			
		return responseObj;
	}
	
	
	
}
