package com.bizofficer.subscription.payments;



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.SubscriptionPaymentTransaction;
import com.bizofficer.util.system.MakeDate;



@Service
public class PayTransService{
	
	private static final Logger logger = Logger.getLogger(PayTransService.class);
	
    @Autowired
	EntityManagerFactory entityManagerFactory;
	
	public Object execute(Object obj) throws NotFoundException{
		APayBean objBean = (APayBean) obj; 	
		PayTransResponseBean respObj = new PayTransResponseBean();		
		
		try {
			
			logger.info("StudentId >> " + objBean.getStudentId() );

			respObj.setResponseTxt("failed");
			
			if(objBean.getStudentId()==null) {
				return respObj;
			}
			
			List<PayTransBean> dataList = new ArrayList<PayTransBean>();
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			MakeDate mkdateObj = new MakeDate();

			PayTransBean resObj = new PayTransBean();
			
			TypedQuery<SubscriptionPaymentTransaction> query = (TypedQuery<SubscriptionPaymentTransaction>) entityManager.createQuery("from "+SubscriptionPaymentTransaction.class.getName()+" WHERE studentId=:studentId ORDER BY paymentId DESC ", SubscriptionPaymentTransaction.class);
			query.setParameter("studentId", objBean.getStudentId() );
			query.setFirstResult(0);
			query.setMaxResults(500);
			List<?> resultList = query.getResultList();
			Iterator<?> iterator=resultList.iterator();
			int i=1;
			while(iterator.hasNext()){
				SubscriptionPaymentTransaction myObj = (SubscriptionPaymentTransaction)iterator.next();
				
				resObj = new PayTransBean();
				resObj.setId(i);
				resObj.setAutoId(myObj.getPaymentId());
				resObj.setDomainName(myObj.getDomainName());
				resObj.setWebsiteId(myObj.getWebsiteId());
				resObj.setStudentName(myObj.getStudentName());
				resObj.setCourseId(myObj.getCourseId());	
				resObj.setCourseName(myObj.getCourseName());
				resObj.setAmount(myObj.getAmount());
				resObj.setReferenceNumber(myObj.getReferenceNumber());
				resObj.setCreatedDateTime(mkdateObj.changeDateTimeFormat(myObj.getCreatedDateTime(), "dd-MM-yyyy HH:mm"));

				dataList.add(resObj);
				i++;
			}	
           
			respObj.setDataList(dataList);
			
            entityManager.getTransaction().commit();
			entityManager.close();
			
			respObj.setResponseTxt("success");
			
		}catch(Exception e) {
			e.getStackTrace();			
		}
		
		
		return respObj;
	}
	
	
	
	
}
