package com.bizofficer.school.teachers;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.bizofficer.school.classes.ClassesBean;
import com.bizofficer.school.classes.ClassesService;
import com.bizofficer.school.classes.SchoolClassesResponseBean;
import com.bizofficer.school.sclogin.SchoolLoginBean;
import com.bizofficer.school.sclogin.TokenVerifyRespSchoolPojo;
import com.bizofficer.school.sclogin.TokenVerifySchoolService;
import com.bizofficer.school.subjects.SubjectBean;
import com.bizofficer.school.subjects.SubjectResponseBean;
import com.bizofficer.school.subjects.SubjectService;

@RestController
@Service
public class TeacherAssociationController {
	
	private static final Logger logger = Logger.getLogger(TeacherAssociationController.class);
	
	@Autowired
	private TokenVerifySchoolService objTokenVerifySchoolService;
	
	
	@Autowired
	private TeacherAssociationService serviceObj;
	
	@Autowired
	private ClassesService classesServiceObj;
	
	@Autowired
	private TeachService teacherServiceObj;
	
	@Autowired
	private SubjectService subjectServiceObj;
	
	@RequestMapping(value = {"/teacherassociation"}, method = {RequestMethod.GET})
	public ResponseEntity<Object> execute(@ModelAttribute("SpringWeb")TeachBean objBean, @RequestHeader("emailId") String emailId, @RequestHeader("token") String token) {
		
		try {
			
			SchoolLoginBean loginBean = new SchoolLoginBean();
			loginBean.setEmailId(emailId);
			loginBean.setToken(token);
			TokenVerifyRespSchoolPojo objTokenVerifyResponse = (TokenVerifyRespSchoolPojo) (Object) objTokenVerifySchoolService.execute(loginBean);
			
			if(objTokenVerifyResponse.getResponseTxt().equals("success")) {
			
				objBean.setSchoolId(objTokenVerifyResponse.getSchoolId());
				TeacherAssociationResponseBean tsrbObj = (TeacherAssociationResponseBean) (Object) serviceObj.execute(objBean);
	
				TeacherSchoolResponseBean teacherObj = (TeacherSchoolResponseBean) (Object) teacherServiceObj.execute(objBean);
				if(teacherObj.getResponseTxt().equals("success")) {
					tsrbObj.setTeachers(teacherObj.getList());
				}
				
				ClassesBean clsBean = new ClassesBean();
				clsBean.setSchoolId(objTokenVerifyResponse.getSchoolId());
				SchoolClassesResponseBean classesObj = (SchoolClassesResponseBean) (Object) classesServiceObj.execute(clsBean);
				if(classesObj.getResponseTxt().equals("success")) {
					tsrbObj.setClasses(classesObj.getList());
				}				
				
				SubjectBean subjectBean = new SubjectBean();
				subjectBean.setEmailId(emailId);
				subjectBean.setToken(token);
				@SuppressWarnings("unchecked")
				List<SubjectResponseBean> subjectObj = (List<SubjectResponseBean>) (Object) subjectServiceObj.execute(subjectBean);
				tsrbObj.setSubjects(subjectObj);
				
				HttpHeaders headers = new HttpHeaders();
		        ////headers.add("Responded", "UserController");
		        return ResponseEntity.ok().headers(headers).body(tsrbObj);
		        
			}
			
			logger.info("Token Verify ResponseTxt: "+objTokenVerifyResponse.getResponseTxt());
			
			HttpHeaders headers = new HttpHeaders();
	        return ResponseEntity.ok().headers(headers).body(objTokenVerifyResponse);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
	}
	

	
	
}
