package com.bizofficer.school.teachers;



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.PgprepTeachers;
import com.bizofficer.hibernate.repository.PgprepSchoolUsersRepository;


@Service
public class TeachService{
	
	private static final Logger logger = Logger.getLogger(TeachService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepSchoolUsersRepository adminRepo;
	
	public Object execute(Object obj) throws NotFoundException{
		TeachBean objBean = (TeachBean) obj;
		TeacherSchoolResponseBean responseObj = new TeacherSchoolResponseBean();
		
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("Keyword >> " + objBean.getKeyword() );
			
			List<TeachResponseBean> responseListObj = new ArrayList<TeachResponseBean>();
			
			logger.info("*********************Teachers******************************");
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			String whereQry =" WHERE schoolId="+objBean.getSchoolId();			
			if(objBean.getKeyword()!=null && objBean.getKeyword().length()>0 ) {
				whereQry +=" AND (loginId LIKE :keyword OR emailId LIKE :keyword OR teacherName LIKE :keyword OR accountStatus LIKE :keyword OR role LIKE :keyword ) ";
			}
			TypedQuery<PgprepTeachers> query = (TypedQuery<PgprepTeachers>) entityManager.createQuery("from "+PgprepTeachers.class.getName()+whereQry+" order by id desc ", PgprepTeachers.class);
			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("Teachers resultList Count: "+resultList.size());
			Iterator<?> iterator=resultList.iterator();	
			TeachResponseBean responseBeanObj;
			int i=1;
			while(iterator.hasNext()){
				PgprepTeachers myObj = (PgprepTeachers)iterator.next();		
				
				responseBeanObj = new TeachResponseBean();
				responseBeanObj.setId(i);
				responseBeanObj.setAutoId(myObj.getId());
				responseBeanObj.setTeacherId(myObj.getId());
				
				responseBeanObj.setSchoolId(myObj.getSchoolId());
				
				if(myObj.getAccountStatus()==1) {
					responseBeanObj.setAccountStatus("Active");
					responseBeanObj.setAccountStatusChk(true);
				}else {
					responseBeanObj.setAccountStatus("Not Active");
					responseBeanObj.setAccountStatusChk(false);
				}
				
				responseBeanObj.setSchoolName(myObj.getSchoolName());
				responseBeanObj.setLoginId(myObj.getLoginId());
				responseBeanObj.setEmailId(myObj.getEmailId());
				responseBeanObj.setTeacherName(myObj.getTeacherName());
				responseBeanObj.setRole(myObj.getRole());
				
				responseListObj.add(responseBeanObj);
				i++;
			}

			logger.info("Teachers Count: "+responseListObj.size());
				
			entityManager.getTransaction().commit();
			entityManager.close();
		    
			responseObj.setList(responseListObj);
			
			responseObj.setResponseTxt("success");
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
