package com.bizofficer.admin.topiccontent;



import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.data.crossstore.ChangeSetPersister.NotFoundException;
import org.springframework.stereotype.Service;

import com.bizofficer.hibernate.entity.PgprepAdministrator;
import com.bizofficer.hibernate.entity.PgprepTopicContent;
import com.bizofficer.hibernate.repository.PgprepAdministratorRepository;
import com.bizofficer.hibernate.repository.PgprepTopicContentRepository;
import com.bizofficer.module.util.PrivilegesBeans;
import com.bizofficer.module.util.PrivilegesUtil;
import com.bizofficer.module.util.RoleModules;
import com.bizofficer.system.util.General;
import com.bizofficer.system.util.MakeDate;


@Service
public class ContentCreationAdService{
	
	private static final Logger logger = Logger.getLogger(ContentCreationAdService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepAdministratorRepository adminRepo;
	
	@Autowired
	PgprepTopicContentRepository contRepo;
	
	@Autowired
	private Environment env;
	
	public Object execute(Object obj) throws NotFoundException{
		ContentAdBean objBean = (ContentAdBean) obj;
		ContentSaveAdResponseBean responseObj = new ContentSaveAdResponseBean();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("LoginEmailId >> " + objBean.getLoginEmailId() );
			logger.info("Token >> " + objBean.getToken() );
			
			logger.info("TopicId >> " + objBean.getTopicId() );
			logger.info("ContentName >> " + objBean.getContentName() );
			logger.info("ContentUrl >> " + objBean.getContentUrl() );
			logger.info("Description >> " + objBean.getDescription() );
			logger.info("ContentType >> " + objBean.getContentType() );
			logger.info("ContentSource >> " + objBean.getContentSource() );
			logger.info("ContOrder >> " + objBean.getContOrder() );
			logger.info("Country >> " + objBean.getCountry() );
			logger.info("Standard >> " + objBean.getStandard() );
			
			if(objBean.getLoginEmailId()==null || objBean.getToken()==null || objBean.getContentName()==null) {
				return responseObj;
			}
			
			PgprepAdministrator adminObj = (PgprepAdministrator) adminRepo.findByEmailIdAndLoginToken(objBean.getLoginEmailId(), objBean.getToken());
			if(adminObj==null) {
				return responseObj;
			}			

			logger.info("Verify >> " + adminObj.getId() );
			
			if(adminObj.getUserType()==0 && adminObj.getRoleId()!=null && adminObj.getPrivileges()!=null){				
				PrivilegesUtil	myPgUtil = new PrivilegesUtil();
				PrivilegesBeans prvgbnObj = myPgUtil.authPrivileges(adminObj.getPrivileges(), RoleModules.getSmartLearningTopic() );
				logger.info(prvgbnObj.toString());
				
				if(prvgbnObj==null || (prvgbnObj!=null && (prvgbnObj.getCreate()==null || prvgbnObj.getCreate()==0))) {
					logger.info("NoAuthorization");
					responseObj.setResponseTxt("NoAuthorization");
					return responseObj;
				}

			}
			
			PgprepTopicContent existObj = contRepo.getIdByContentName(objBean.getContentName());
			logger.info("AlreadyExistsError");
			logger.info("Existing >> " + existObj );
			if(existObj!=null && existObj.getId()>0) {
				responseObj.setResponseTxt("AlreadyExistsError");
				return responseObj;
			}
			
			MakeDate mkdateObj = new MakeDate();
			EntityManager entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
			
			PgprepTopicContent saveObj = new PgprepTopicContent();
			
			saveObj.setTopicId(objBean.getTopicId());
			saveObj.setTopicName(objBean.getTopicName());
			saveObj.setContentName(objBean.getContentName());
			saveObj.setContentUrl(objBean.getContentUrl());
			saveObj.setDescription(objBean.getDescription());
			saveObj.setContentType(objBean.getContentType());
			saveObj.setContentSource(objBean.getContentSource());
			saveObj.setContOrder(objBean.getContOrder());
			saveObj.setCountry(objBean.getCountry());
			saveObj.setStandard(objBean.getStandard());
			
			saveObj.setPostBy(adminObj.getEmailId());
			saveObj.setPostDate(mkdateObj.getCurrentTimeStamp());
			
			if(objBean.getContentSource()!=null && objBean.getContentSource()==3 && objBean.getContentFile()!=null && objBean.getContentFile().size()>0 && objBean.getContentName()!=null && objBean.getContentName().length()>0) {
				General gen = new General();
				String[] alpha = {"abc","bcd","cde","def","efg","fgh","ghi","hij","ijk","jkl","klm","lmn","mno","nop","opq","pqr","qrs","rst","stu","tuv","uwx","vuw","wxy","xyz","yza","zab"};
			  	String renameFile="content-"+objBean.getContentName()+alpha[gen.getRandomNumber(0, 25)]+gen.getRandomNumber(12, 97);                                   
			  	List<String> uploadedFiles = gen.uploadMultipleSpringFiles(objBean.getContentFile(),env.getProperty("absolutePathContent"),renameFile);
			  	if(uploadedFiles!=null && uploadedFiles.size()>0) {
				  	String[] uploadedFileArr =uploadedFiles.get(0).split("#####");
				    if(uploadedFileArr[0]!=null){
				    	logger.info("ContentFile >> " + uploadedFileArr[0] );
				    	saveObj.setContentUrl(env.getProperty("virtualUrlContent")+"/"+uploadedFileArr[0]);
				    }
			  	}
			}
			
			contRepo.save(saveObj);
			
			responseObj.setResponseTxt("success");
			
			entityManager.getTransaction().commit();
			entityManager.close();
		        
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
