package com.bizofficer.parents.web;



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.PgprepParentsChildren;
import com.bizofficer.hibernate.entity.PgprepStudentCourses;



@Service
public class ParentsChildrenService{
	
	private static final Logger logger = Logger.getLogger(ParentsChildrenService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	public Object execute(Object obj) throws NotFoundException{
		ParentsRequestBean objBean = (ParentsRequestBean) obj; 	
		ParentsResponse responseObj = new ParentsResponse();
		
		try {
			
			logger.info("ParentId: "+objBean.getParentId() );

			responseObj.setResponseTxt("failed");
			
			if(objBean.getParentId()==null) {
				return responseObj;
			}

			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			List<ParentsChildrenBean> children = new ArrayList<ParentsChildrenBean>();
			ParentsChildrenBean beanChObj;
			StudentCoursePBean corsChObj;
					
			TypedQuery<PgprepParentsChildren> queryTeach = (TypedQuery<PgprepParentsChildren>) entityManager.createQuery("from "+PgprepParentsChildren.class.getName()+" where parentId=:parentId ", PgprepParentsChildren.class);
			queryTeach.setParameter("parentId", objBean.getParentId());
			queryTeach.setFirstResult(0);
			queryTeach.setMaxResults(50);
			List<?> resultListTeach = queryTeach.getResultList();
			Iterator<?> iteratorTeach=resultListTeach.iterator();
			int i=1;
			while(iteratorTeach.hasNext()){
				PgprepParentsChildren myChObj = (PgprepParentsChildren)iteratorTeach.next();
			
				beanChObj = new ParentsChildrenBean();
				beanChObj.setId(i);
				beanChObj.setStudentId(myChObj.getStudentId());
				beanChObj.setFullName(myChObj.getFullName());	
				
				List<StudentCoursePBean> studentCourses = new ArrayList<StudentCoursePBean>();										
				TypedQuery<PgprepStudentCourses> queryCors = (TypedQuery<PgprepStudentCourses>) entityManager.createQuery("from "+PgprepStudentCourses.class.getName()+" where studentId=:studentId ", PgprepStudentCourses.class);
				queryCors.setParameter("studentId", myChObj.getStudentId());
				queryCors.setFirstResult(0);
				queryCors.setMaxResults(20);
				List<?> resultCors = queryCors.getResultList();
				Iterator<?> iteratorCors = resultCors.iterator();
				while(iteratorCors.hasNext()){
					PgprepStudentCourses myCorsObj = (PgprepStudentCourses)iteratorCors.next();
					
					corsChObj = new StudentCoursePBean();
					corsChObj.setCourseId(myCorsObj.getCourseId());
					corsChObj.setCourseTitle(myCorsObj.getCourseTitle());
					corsChObj.setOrganisationId(myCorsObj.getOrganisationId()); 
					
					studentCourses.add(corsChObj);
				}
				
				beanChObj.setCourses(studentCourses);

				
				children.add(beanChObj);
				
                i++;
			}	

			responseObj.setList(children);
			
			responseObj.setResponseTxt("success");
			
            entityManager.getTransaction().commit();
			entityManager.close();

		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	
	
	
	
}
