package com.bizofficer.school.students;



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.PgprepStudentDetails;
import com.bizofficer.hibernate.repository.PgprepSchoolUsersRepository;


@Service
public class SchoolStudentsService{
	
	private static final Logger logger = Logger.getLogger(SchoolStudentsService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepSchoolUsersRepository adminRepo;
	
	public Object execute(Object obj) throws NotFoundException{
		BeanStudents objBean = (BeanStudents) obj;
		SchoolStudentsResponseBean responseObj = new SchoolStudentsResponseBean();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("StudentAdminService Keyword >> " + objBean.getKeyword() );
			
			logger.info("*********************Students******************************");
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			String whereQry =" WHERE schoolId="+objBean.getSchoolId();			
			if(objBean.getKeyword()!=null && objBean.getKeyword().length()>0 ) {
				whereQry +=" AND (studentId LIKE :keyword OR emailId LIKE :keyword OR sname LIKE :keyword OR phoneNo LIKE :keyword ) ";
			}
			TypedQuery<PgprepStudentDetails> query = (TypedQuery<PgprepStudentDetails>) entityManager.createQuery("from "+PgprepStudentDetails.class.getName()+whereQry+" order by id desc ", PgprepStudentDetails.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("Students resultList Count: "+resultList.size());
			Iterator<?> iterator=resultList.iterator();	
			List<SchoolStudentsBean> students = new ArrayList<SchoolStudentsBean>();
			SchoolStudentsBean schoolStudentsBean = null;
			int i=1;
			while(iterator.hasNext()){
				PgprepStudentDetails myObj = (PgprepStudentDetails)iterator.next();		
				
				schoolStudentsBean = new SchoolStudentsBean();
				schoolStudentsBean.setId(i);
				schoolStudentsBean.setAutoId(myObj.getId());

				schoolStudentsBean.setStudentId(myObj.getStudentId());
				schoolStudentsBean.setStudentName(myObj.getSname());
				schoolStudentsBean.setEmailId(myObj.getEmailId());
				schoolStudentsBean.setPhoneNo(myObj.getPhoneNo());
				schoolStudentsBean.setClassName(myObj.getClassName());
				schoolStudentsBean.setAdmissionNumber(myObj.getAdmissionNumber());
				
				students.add(schoolStudentsBean);
				i++;
			}

			logger.info("Students Count: "+students.size());
			
			responseObj.setStudents(students);
			
			entityManager.getTransaction().commit();
			entityManager.close();
			
			responseObj.setResponseTxt("success");
		        
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
