package com.bizofficer.website.courses;



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.stereotype.Service;

import com.bizofficer.hibernate.entity.SubscriptionCourses;
import com.bizofficer.hibernate.entity.SubscriptionCoursesCategory;
import com.bizofficer.pojo.response.ResponsePojo;
import com.bizofficer.util.system.MakeDate;


@Service
public class WebCatAndCoursesService{
	
	private static final Logger logger = Logger.getLogger(WebCatAndCoursesService.class);
	
    @Autowired
	EntityManagerFactory entityManagerFactory;
	
	public Object execute(Object obj){
		AWebCoursesBean objBean = (AWebCoursesBean) obj; 	
		ResponsePojo responseObj = new ResponsePojo();
		
		try {

			responseObj.setResponseTxt("failed");
			
			logger.info("WebUrl: "+objBean.getWebUrl());
			
			if(objBean.getWebUrl()==null) {
				return responseObj;
			}			

			List<WebCatAndCoursesResponseBean> dataList = new ArrayList<WebCatAndCoursesResponseBean>();

			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
//			objBean.setWebsiteId(1);
//			if(objBean.getDomainName()!=null && objBean.getDomainName().length()>0) {
//				logger.info("Domain Set: "+objBean.getDomainName());
//				TypedQuery<SubscriptionWebsites> queryCat = (TypedQuery<SubscriptionWebsites>) entityManager.createQuery("from "+SubscriptionWebsites.class.getName()+" WHERE TRIM(webUrl)=:webUrl ", SubscriptionWebsites.class);
//				queryCat.setParameter("webUrl", objBean.getDomainName().trim());
//				List<?> resultListCat = queryCat.getResultList();
//				Iterator<?> iteratorCat=resultListCat.iterator();
//				if(iteratorCat.hasNext()){					
//					SubscriptionWebsites myObj = (SubscriptionWebsites)iteratorCat.next();
//					if(myObj.getId()!=null) {
//						logger.info("Domain Id: "+myObj.getId());
//						objBean.setWebsiteId(myObj.getId());
//					}
//				}	
//			}
//			
//			logger.info("WebsiteId: "+objBean.getWebsiteId());

			MakeDate dateObj = new MakeDate();
			WebCatAndCoursesResponseBean catResObj = new WebCatAndCoursesResponseBean();
			WebCoursesDetailsBean corsResObj = new WebCoursesDetailsBean();
			List<WebCoursesDetailsBean> coursesList = new ArrayList<WebCoursesDetailsBean>();
			
			
			//WebCoursePromoBean coursePromoBeanObj = null; 
			
			TypedQuery<SubscriptionCoursesCategory> queryCat = (TypedQuery<SubscriptionCoursesCategory>) entityManager.createQuery("from "+SubscriptionCoursesCategory.class.getName()+" WHERE status=1 AND webUrl=:webUrl order by orderBy ", SubscriptionCoursesCategory.class);
			queryCat.setParameter("webUrl", objBean.getWebUrl() );
			List<?> resultListCat = queryCat.getResultList();
			Iterator<?> iteratorCat=resultListCat.iterator();
			while(iteratorCat.hasNext()){
				SubscriptionCoursesCategory myObj = (SubscriptionCoursesCategory)iteratorCat.next();
				
				catResObj = new WebCatAndCoursesResponseBean();
				catResObj.setCategoryId(myObj.getCategoryId());
				catResObj.setCategoryName(myObj.getCategoryName());
				
				coursesList = new ArrayList<WebCoursesDetailsBean>();
				TypedQuery<SubscriptionCourses> query = (TypedQuery<SubscriptionCourses>) entityManager.createQuery("from "+SubscriptionCourses.class.getName()+" WHERE status=1 AND websiteId=:websiteId AND categoryId=:categoryId AND validityDate>=CURDATE() order by orderBy ", SubscriptionCourses.class);
				query.setParameter("websiteId", myObj.getWebsiteId() );
				query.setParameter("categoryId", myObj.getCategoryId() );			
				List<?> resultList = query.getResultList();
				Iterator<?> iterator=resultList.iterator();
				while(iterator.hasNext()){
					SubscriptionCourses myCrsObj = (SubscriptionCourses)iterator.next();
					
					corsResObj = new WebCoursesDetailsBean();
					corsResObj.setCourseId(myCrsObj.getCourseId());
					corsResObj.setCourseTitle(myCrsObj.getCourseTitle());
					
					if(myCrsObj.getCourseUrl()!=null && myCrsObj.getCourseUrl().length()>0) {
						corsResObj.setCourseUrl(myCrsObj.getCourseUrl().trim().replaceAll(" ", "-").toLowerCase());
					}
					
					corsResObj.setCourseSubTitle(myCrsObj.getCourseSubTitle());
					corsResObj.setHeadingDescription(myCrsObj.getHeadingDescription());

					//corsResObj.setValidityNumber(myCrsObj.getValidityNumber());
					//corsResObj.setValidityUnit(myCrsObj.getValidityUnit());

					corsResObj.setCourseDetailMobile(myCrsObj.getCourseDetailMobile());
					
					corsResObj.setRetailPrice(myCrsObj.getRetailPrice());
					corsResObj.setSalePrice(myCrsObj.getSalePrice());
					corsResObj.setDiscount(myCrsObj.getDiscount());
					
					if(myCrsObj.getValidityDate()!=null) {
						corsResObj.setValidityDate(dateObj.dateToString(myCrsObj.getValidityDate(), "dd-MM-yyyy"));
					}
					
//					List<WebCoursePromoBean> promoList = new ArrayList<WebCoursePromoBean>();
//					
//					TypedQuery<SubscriptionPromocode> queryPC = (TypedQuery<SubscriptionPromocode>) entityManager.createQuery("from "+SubscriptionPromocode.class.getName()+" WHERE CURDATE()>=startDate AND CURDATE()<=endDate AND status=1 AND displayPublic=1 AND websiteId=:websiteId AND (courseId=:courseId OR courseId is null OR courseId<1) order by id  ", SubscriptionPromocode.class);
//					queryPC.setParameter("websiteId", myObj.getWebsiteId() );
//					queryPC.setParameter("courseId", myCrsObj.getCourseId());
//					queryPC.setFirstResult(0);
//					queryPC.setMaxResults(3);
//					List<?> resultPCList = queryPC.getResultList();
//					Iterator<?> iteratorPC = resultPCList.iterator();
//					while(iteratorPC.hasNext()){
//						SubscriptionPromocode myPCObj = (SubscriptionPromocode)iteratorPC.next();		
//						
//						coursePromoBeanObj = new WebCoursePromoBean();
//						coursePromoBeanObj.setDescription(myPCObj.getDescription());	
//						
//						promoList.add(coursePromoBeanObj);
//						
//					}
//					
//					corsResObj.setPromoList(promoList);

					coursesList.add(corsResObj);
					
				}	
				
				if(coursesList!=null && coursesList.size()>0) {
					catResObj.setCoursesList(coursesList);				
					dataList.add(catResObj);
				}
				
			}	
           
                        
            entityManager.getTransaction().commit();
			entityManager.close();
			
			responseObj.setList(dataList);
			
			responseObj.setResponseTxt("success");
			
		}catch(Exception e) {
			e.getStackTrace();			
		}
		
		
		return responseObj;
	}
	
	
	
	
}
