package com.bizofficer.school.teachers;



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 EditTeacherAssociationService{
	
	private static final Logger logger = Logger.getLogger(EditTeacherAssociationService.class);
	
	@Autowired
	EntityManagerFactory entityManagerFactory;
	
	@Autowired
	PgprepSchoolUsersRepository adminRepo;
	
	@Autowired
	PgprepTeacherAssociationRepository techRepo;
	
	@Autowired
	OrganisationTemplateAssociationRepository otaRepo;
	
	public Object execute(Object obj) throws NotFoundException{
		TeachBean objBean = (TeachBean) obj;
		TeacherSchoolResponseBean responseObj = new TeacherSchoolResponseBean();
		
		try {
			
			responseObj.setResponseTxt("failed");
			
			logger.info("TeacherId >> " + objBean.getTeacherId() );
			logger.info("Batch >> " + objBean.getClassName() );
			logger.info("Subject >> " + objBean.getSubject() );
			logger.info("Organisation Id >> " + objBean.getOrganisationId() );
			
			if(objBean.getTeacherAssociationId()==null) {
				return responseObj;
			}
			
			logger.info("Teacher Association Id >> " + objBean.getTeacherAssociationId() );
			
			PgprepTeacherAssociation teachObj = techRepo.findByIdNotAndSchoolIdAndTeacherIdAndClassNameAndOrganisationIdAndSubject(objBean.getTeacherAssociationId(), 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("Edit Teacher Association");
			
				EntityManager entityManager = entityManagerFactory.createEntityManager();
				entityManager.getTransaction().begin();
				MakeDate dateObj = new MakeDate();
			
				PgprepTeacherAssociation findObj = (PgprepTeacherAssociation)entityManager.find(PgprepTeacherAssociation.class ,objBean.getTeacherAssociationId());
				findObj.setTeacherName(objBean.getTeacherName()); 
				findObj.setTeacherId(objBean.getTeacherId());
				findObj.setTeacherLoginId(objBean.getTeacherLoginId()); 
				findObj.setClassName(objBean.getClassName());
				findObj.setSubject(objBean.getSubject()); 
				findObj.setTemplateId(templateId);
				findObj.setOrganisationId(objBean.getOrganisationId());
				findObj.setUpdatedDateTime(dateObj.getCurrentTimeStamp());
	
				responseObj.setResponseTxt("success");
				
				entityManager.getTransaction().commit();
				entityManager.close();

				logger.info("EDIT SAVED Teacher Association Id >> " + objBean.getTeacherAssociationId() );
				
		}catch(Exception e) {
			e.getStackTrace();
		}
		
		
		return responseObj;
	}
	

	
	

	
	
}
