package com.bizofficer.subscription.registration;



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.entity.SubscriptionOtp;
import com.bizofficer.hibernate.repository.PgprepStudentDetailsRepository;
import com.bizofficer.hibernate.repository.SubscriptionOtpRepository;
import com.bizofficer.util.module.SendSMS;
import com.bizofficer.util.module.SendSMSBean;


@Service
public class ResendOtpMobileService{
	
	private static final Logger logger = Logger.getLogger(ResendOtpMobileService.class);
	
    @Autowired
	EntityManagerFactory entityManagerFactory;
    
    @Autowired
	PgprepStudentDetailsRepository stRepoObj;
    
    @Autowired
    SubscriptionOtpRepository subsRepo;
    
	public Object execute(Object obj) throws NotFoundException{
		AaRegBean objBean = (AaRegBean) obj; 	
		RegistrationResponseBean responseBeanObj = new RegistrationResponseBean();
		
		try {
			responseBeanObj.setResponseTxt("failed");
			
			if(objBean.getMobile()==null) {
				return responseBeanObj;
			}
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();

			logger.info("Mobile: "+objBean.getMobile() );
			logger.info("Token: "+objBean.getToken() );
			
	           TypedQuery<PgprepStudentDetails> query = (TypedQuery<PgprepStudentDetails>) entityManager.createQuery("from "+PgprepStudentDetails.class.getName()+" where phoneNo=:phoneNo ", PgprepStudentDetails.class);
	           query.setParameter("phoneNo", objBean.getMobile() );
	           query.setFirstResult(0);
	           query.setMaxResults(1);
	           List<?> resultListCat = query.getResultList();
	           Iterator<?> iteratorCat=resultListCat.iterator();
	           if(iteratorCat.hasNext()){            			

	        	   responseBeanObj.setResponseTxt("MobileExists");
	           
	           }else {

	 	           TypedQuery<SubscriptionOtp> queryOtp = (TypedQuery<SubscriptionOtp>) entityManager.createQuery("from "+SubscriptionOtp.class.getName()+" where otpKey=:token ", SubscriptionOtp.class);
	 	           queryOtp.setParameter("token", objBean.getToken() );
	 	           queryOtp.setFirstResult(0);
	 	           queryOtp.setMaxResults(1);
		           List<?> resultListOtp = queryOtp.getResultList();
		           Iterator<?> iteratorOtp=resultListOtp.iterator();
		           if(iteratorOtp.hasNext()){            			
		        	   SubscriptionOtp myOtp = (SubscriptionOtp)iteratorOtp.next();
		        	   
		        	   SendSMSBean smsBean = new SendSMSBean();
		   			   smsBean.setMobile(objBean.getMobile());
			   		   smsBean.setOtpNumber(myOtp.getOtpVal());
			   		   smsBean.setWebsiteName("EaseToLearn");
		   			   new SendSMS().OTP(smsBean);
		        	   
		           }

	        	   responseBeanObj.setResponseTxt("OK");
	           }

            entityManager.getTransaction().commit();
			entityManager.close();
			
		}catch(Exception e) {
			e.getStackTrace();			
		}
		
		
		return responseBeanObj;
	}
	
	
	
	
}
