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.repository.SubscriptionCoursesTabsRepository;
import com.bizofficer.pojo.response.ListResponsePojo;
import com.bizofficer.util.system.MakeDate;


@Service
public class WebCourseDetailsService{
	
	private static final Logger logger = Logger.getLogger(WebCourseDetailsService.class);
	
    @Autowired
	EntityManagerFactory entityManagerFactory;
	
    @Autowired
    SubscriptionCoursesTabsRepository objSubscriptionCoursesTabsRepository;
    
	public Object execute(Object obj){
		AWebCoursesBean objBean = (AWebCoursesBean) obj; 	
		ListResponsePojo responseObj = new ListResponsePojo();
		
		try {

			responseObj.setResponseTxt("failed");
			
			logger.info("CourseId: "+objBean.getCourseId());
			
			if(objBean.getCourseId()==null) {
				return responseObj;
			}			

			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			MakeDate dateObj = new MakeDate();
			
				TypedQuery<SubscriptionCourses> query = (TypedQuery<SubscriptionCourses>) entityManager.createQuery("from "+SubscriptionCourses.class.getName()+" WHERE status=1 AND courseId=:courseId ", SubscriptionCourses.class);
				query.setParameter("courseId", objBean.getCourseId() );
				query.setFirstResult(0);
				query.setMaxResults(1);
				List<?> resultList = query.getResultList();
				Iterator<?> iterator=resultList.iterator();
				if(iterator.hasNext()){
					SubscriptionCourses myCrsObj = (SubscriptionCourses)iterator.next();
					
					WebCoursesDetailsBean 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<?> coursesTabs = objSubscriptionCoursesTabsRepository.findByCourseIdAndStatus(myCrsObj.getCourseId(), 1);
					if(coursesTabs!=null) {
						corsResObj.setTabs(coursesTabs);
					}
					
					List<WebCoursesDetailsBean> relatedCoursesList = new ArrayList<WebCoursesDetailsBean>();
					TypedQuery<SubscriptionCourses> queryCors = (TypedQuery<SubscriptionCourses>) entityManager.createQuery("from "+SubscriptionCourses.class.getName()+" WHERE status=1 AND categoryId=:categoryId ORDER BY rand() ", SubscriptionCourses.class);
					queryCors.setParameter("categoryId", myCrsObj.getCategoryId() );
					queryCors.setFirstResult(0);
					queryCors.setMaxResults(4);
					List<?> resultListCors = queryCors.getResultList();
					Iterator<?> iteratorCors=resultListCors.iterator();
					while(iteratorCors.hasNext()){
						SubscriptionCourses myRCors = (SubscriptionCourses)iteratorCors.next();
						
						WebCoursesDetailsBean wbCorsObj = new WebCoursesDetailsBean();
						wbCorsObj.setCategoryName(myRCors.getCategoryName());
						wbCorsObj.setCourseId(myRCors.getCourseId());
						wbCorsObj.setCourseTitle(myRCors.getCourseTitle());
						
						if(myRCors.getCourseUrl()!=null && myRCors.getCourseUrl().length()>0) {
							wbCorsObj.setCourseUrl(myRCors.getCourseUrl().trim().replaceAll(" ", "-").toLowerCase());
						}
						
						relatedCoursesList.add(wbCorsObj);
					}	
					
					corsResObj.setRelatedCourses(relatedCoursesList);
					
					responseObj.setObj(corsResObj);
					
				}	
                        
            entityManager.getTransaction().commit();
			entityManager.close();
			
			
			responseObj.setResponseTxt("success");
			
		}catch(Exception e) {
			e.getStackTrace();			
		}
		
		
		return responseObj;
	}
	
	
	
	
}
