package com.bizofficer.admin.parents;



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.PgprepStudentDetails;
import com.bizofficer.hibernate.repository.PgprepParentsChildrenRepository;
import com.bizofficer.hibernate.repository.PgprepStudentDetailsRepository;


@Service
public class ParentAddChildService{
	
	private static final Logger logger = Logger.getLogger(ParentAddChildService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepStudentDetailsRepository stRepo;
	
	@Autowired
	PgprepParentsChildrenRepository  pcRepo;
	
	public Object execute(Object obj) throws NotFoundException{
		ParentsAdmRequest objBean = (ParentsAdmRequest) obj;
		ParentsAdmResponse responseObj = new ParentsAdmResponse();
		
		try {
			
				responseObj.setResponseTxt("failed");
			
				logger.info("studentId >> " + objBean.getStudentId() );
				logger.info("ParentId >> " + objBean.getParentId() );
			
				if(objBean.getStudentId()==null || objBean.getLoginEmailId()==null || objBean.getToken()==null) {
					return responseObj;
				}
			
				EntityManager entityManager = entityManagerFactory.createEntityManager();
				entityManager.getTransaction().begin();
				
				PgprepParentsChildren  checkExistingObj = pcRepo.findByParentIdAndStudentId(objBean.getParentId(), objBean.getStudentId());
				if(checkExistingObj!=null) {
					responseObj.setResponseTxt("AlreadyExists");
					return responseObj;
				}
				
				TypedQuery<PgprepStudentDetails> query = (TypedQuery<PgprepStudentDetails>) entityManager.createQuery("from "+PgprepStudentDetails.class.getName()+" WHERE studentId=:studentId ", PgprepStudentDetails.class);
				query.setParameter("studentId", objBean.getStudentId());
				List<?> resultList = query.getResultList();
				Iterator<?> iterator=resultList.iterator();	
				if(iterator.hasNext()){
					PgprepStudentDetails myObj = (PgprepStudentDetails)iterator.next();		
				
					PgprepParentsChildren saveObj = new PgprepParentsChildren();
					saveObj.setParentId(objBean.getParentId());
					saveObj.setStudentId(myObj.getStudentId());
					saveObj.setFullName(myObj.getSname());
					pcRepo.save(saveObj);
					
					responseObj.setResponseTxt("success");
					
				}else {
					responseObj.setResponseTxt("InvalidStudentId");
					
				}
				
				entityManager.getTransaction().commit();
				entityManager.close();
		        
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
