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.PgprepTeacherAssociation;
import com.bizofficer.hibernate.repository.PgprepSchoolUsersRepository;


@Service
public class TeacherAssociationService{
	
	private static final Logger logger = Logger.getLogger(TeacherAssociationService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepSchoolUsersRepository adminRepo;
	
	public Object execute(Object obj) throws NotFoundException{
		TeachBean objBean = (TeachBean) obj;
		TeacherAssociationResponseBean responseObj = new TeacherAssociationResponseBean();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("SchoolId >> " + objBean.getSchoolId() );
			logger.info("Keyword >> " + objBean.getKeyword() );
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			String whereQry =" WHERE schoolId="+objBean.getSchoolId();			
			if(objBean.getKeyword()!=null && objBean.getKeyword().length()>0 ) {
				whereQry +=" AND (teacherName LIKE :keyword OR className LIKE :keyword OR subject LIKE :keyword ) ";
			}
			TypedQuery<PgprepTeacherAssociation> query = (TypedQuery<PgprepTeacherAssociation>) entityManager.createQuery("from "+PgprepTeacherAssociation.class.getName()+whereQry+" order by id desc ", PgprepTeacherAssociation.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("PgprepTeacherAssociation resultList Count: "+resultList.size());
			Iterator<?> iterator=resultList.iterator();	
			
			List<TeacherAssociationBeans> teacherAssociationList = new ArrayList<TeacherAssociationBeans>();
			TeacherAssociationBeans responseBeanObj = null;
			int i=1;
			while(iterator.hasNext()){
				PgprepTeacherAssociation myObj = (PgprepTeacherAssociation)iterator.next();		
				
				responseBeanObj = new TeacherAssociationBeans();
				responseBeanObj.setId(i);
				responseBeanObj.setAutoId(myObj.getId());				
				responseBeanObj.setTeacherLoginId(myObj.getTeacherLoginId());
				responseBeanObj.setTeacherName(myObj.getTeacherName());
				responseBeanObj.setTeacherId(myObj.getTeacherId());
				responseBeanObj.setClassName(myObj.getClassName());
				responseBeanObj.setSubject(myObj.getSubject());
				responseBeanObj.setOrganisationId(myObj.getOrganisationId());
				
				teacherAssociationList.add(responseBeanObj);
				i++;
			}
			
			logger.info("Teacher Association Count: "+teacherAssociationList.size());
			
			responseObj.setTeacherAssociations(teacherAssociationList);
			
			entityManager.getTransaction().commit();
			entityManager.close();

			responseObj.setResponseTxt("success");
			
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
