package com.bizofficer.school.webcourses;



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.PgprepSchoolUsers;
import com.bizofficer.hibernate.entity.SubscriptionCourses;
import com.bizofficer.hibernate.repository.PgprepSchoolUsersRepository;


@Service
public class WebCoursesService{
	
	private static final Logger logger = Logger.getLogger(WebCoursesService.class);
	
    @Autowired
	EntityManagerFactory entityManagerFactory;
    
    @Autowired
	PgprepSchoolUsersRepository schoolUsrRepo;

	public List<?> execute(WebCoursesBean objBean) throws NotFoundException{
		List<WebCoursesResponseBean> dataList = new ArrayList<WebCoursesResponseBean>();
		
		try {
			
			logger.info("*********************Website COURSES******************************");
			logger.info("WebCoursesService LoginEmailId >> " + objBean.getLoginEmailId() );
			logger.info("WebCoursesService Token >> " + objBean.getToken() );
			logger.info("WebCoursesService WebsiteId: "+objBean.getWebsiteId());
			
			if(objBean.getWebsiteId()==null || objBean.getLoginEmailId()==null || objBean.getToken()==null) {
				return dataList;
			}
			
			logger.info("WebCoursesService Website >> " + objBean.getWebsiteId() );
			
			PgprepSchoolUsers userObj = (PgprepSchoolUsers) schoolUsrRepo.findByEmailIdAndLoginToken(objBean.getLoginEmailId(), objBean.getToken());
			if(userObj==null) {
				return dataList;
			}
			
			logger.info("SchoolUser Verify ID: " + userObj.getId() );
			
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();

			WebCoursesResponseBean resObj = new WebCoursesResponseBean();
			
			TypedQuery<SubscriptionCourses> query = (TypedQuery<SubscriptionCourses>) entityManager.createQuery("from "+SubscriptionCourses.class.getName()+" WHERE status=1 AND websiteId=:websiteId ", SubscriptionCourses.class);
			query.setParameter("websiteId", objBean.getWebsiteId() );
			query.setFirstResult(0);
			query.setMaxResults(200);
			List<?> resultList = query.getResultList();
			Iterator<?> iterator=resultList.iterator();
			while(iterator.hasNext()){
				SubscriptionCourses myObj = (SubscriptionCourses)iterator.next();
				
				resObj = new WebCoursesResponseBean();
				resObj.setOrganisationId(myObj.getPaidOrganisationId());
				resObj.setCourseId(myObj.getCourseId());
				resObj.setCourseTitle(myObj.getCourseTitle());
				resObj.setCourseUrl(myObj.getCourseUrl());
				resObj.setCourseSubTitle(myObj.getCourseSubTitle());				
				dataList.add(resObj);
				
			}	
           
			logger.info("Total COURSES: "+dataList.size());
                        
            entityManager.getTransaction().commit();
			entityManager.close();
			
		}catch(Exception e) {
			e.getStackTrace();			
		}
		
		
		return dataList;
	}
	
	
	
	
}
