package com.bizofficer.teacher.association;



import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

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.OrganisationTemplateAssociation;
import com.bizofficer.hibernate.entity.PgprepTeacherAssociation;
import com.bizofficer.hibernate.repository.OrganisationTemplateAssociationRepository;
import com.bizofficer.hibernate.repository.PgprepSchoolUsersRepository;
import com.bizofficer.hibernate.repository.PgprepTeacherAssociationRepository;
import com.bizofficer.util.system.MakeDate;


@Service
public class TeacherAssociationNewZService{
	
	private static final Logger logger = Logger.getLogger(TeacherAssociationNewZService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepSchoolUsersRepository adminRepo;
	
	@Autowired
	PgprepTeacherAssociationRepository techRepo;
	
	@Autowired
	OrganisationTemplateAssociationRepository otaRepo;
	
	public Object execute(Object obj) throws NotFoundException{
		TeachRequestzBean objBean = (TeachRequestzBean) obj;
		TeacherAssociationZResponse responseObj = new TeacherAssociationZResponse();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("SchoolId >> " + objBean.getSchoolId() );
			logger.info("SchoolName >> " + objBean.getSchoolName() );
			
			logger.info("TeacherId >> " + objBean.getTeacherId() );
			logger.info("Batch >> " + objBean.getClassName() );
			logger.info("Subject >> " + objBean.getSubject() );
			logger.info("Organisation Id >> " + objBean.getOrganisationId() );
			
			if(objBean.getTeacherId()==null || objBean.getClassName()==null) {
				return responseObj;
			}

			
			PgprepTeacherAssociation teachObj = techRepo.getIdBySchoolIdAndTeacherIdAndClassNameAndOrganisationIdAndSubject(objBean.getSchoolId(), objBean.getTeacherId(), objBean.getClassName(), objBean.getOrganisationId(), objBean.getSubject());			
			if(teachObj!=null && teachObj.getId()>0) {
				logger.info("Existing Teacher Association >> ");
				responseObj.setResponseTxt("AlreadyExistsError");
				return responseObj;
			}
			
				Integer templateId = 0;
				
				if(objBean.getOrganisationId()!=null) {
					OrganisationTemplateAssociation myTemp = otaRepo.findTemplateIdByOrganisationId(String.valueOf(objBean.getOrganisationId()));
					templateId = myTemp.getTemplateId();
				}

				logger.info("Add New Teacher Association");
			
				EntityManager entityManager = entityManagerFactory.createEntityManager();
				entityManager.getTransaction().begin();
				MakeDate dateObj = new MakeDate();
			
				PgprepTeacherAssociation saveObj = new PgprepTeacherAssociation();
				
				saveObj.setSchoolId(objBean.getSchoolId());
				saveObj.setSchoolName(objBean.getSchoolName());
				saveObj.setTeacherName(objBean.getTeacherName());
				saveObj.setTeacherId(objBean.getTeacherId());
				saveObj.setTeacherLoginId(objBean.getTeacherLoginId());
				saveObj.setClassName(objBean.getClassName());
				saveObj.setSubject(objBean.getSubject());
				saveObj.setTemplateId(templateId);
				saveObj.setOrganisationId(objBean.getOrganisationId());
				saveObj.setUpdatedDateTime(dateObj.getCurrentTimeStamp());
				techRepo.save(saveObj);
	
				responseObj.setResponseTxt("success");
				
				entityManager.getTransaction().commit();
				entityManager.close();
		        
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
