package com.bizofficer.subscription.registration;



import java.util.Iterator;
import java.util.List;
import java.util.UUID;

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;
import com.bizofficer.util.system.General;
import com.bizofficer.util.system.MakeDate;


@Service
public class CheckExistsMobileNumberService{
	
	private static final Logger logger = Logger.getLogger(CheckExistsMobileNumberService.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() );
			
	           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 {

	        	    General gen = new General();
	   				MakeDate dateObj = new MakeDate();
	        	   
        		   String token = UUID.randomUUID().toString()+UUID.randomUUID().toString();
       		   	   Integer otpNumber =  gen.getRandomNumber(101914, 998765);
       		   	   
       		   	   logger.info("otpNumber: "+otpNumber );
                   
                   SubscriptionOtp saveObj = new SubscriptionOtp();
   				   saveObj.setOtpKey(token);
   				   saveObj.setOtpVal(otpNumber);
   				   saveObj.setCreatedDate(dateObj.getCurrentTimeStamp());

   				   subsRepo.save(saveObj);
	        	   
	   			   responseBeanObj.setToken(token);
	   			   
	   			   SendSMSBean smsBean = new SendSMSBean();
	   			   smsBean.setMobile(objBean.getMobile());
		   		   smsBean.setOtpNumber(otpNumber);
		   		   smsBean.setWebsiteName("EaseToLearn");
	   			   new SendSMS().OTP(smsBean);
	   			   
	   			  
	   			   responseBeanObj.setResponseTxt("OK");
	   			  
	   			   
	           }

            entityManager.getTransaction().commit();
			entityManager.close();
			
		}catch(Exception e) {
			e.getStackTrace();			
		}
		
		
		return responseBeanObj;
	}
	
	
	
	
}
