/*
 * Sherwin John Calleja-Tragura
 * Student Management Portal
 */

package org.packt.academic.student.portal.controller;

import java.util.ArrayList;
import java.util.List;

import org.packt.academic.student.portal.model.data.Tbldepartment;
import org.packt.academic.student.portal.model.data.Tblfaculty;
import org.packt.academic.student.portal.model.form.FacultyForm;
import org.packt.academic.student.portal.service.ManagementService;
import org.packt.academic.student.portal.service.ReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.view.RedirectView;

// Administration Faculty Transaction

@Controller
@RequestMapping("/smp/admin_add_faculty")
public class AdminFacultyFormController {
	
	@Autowired
	private ManagementService managementService;
	
	@Autowired
	private ReportService reportService;
	
	@RequestMapping(method=RequestMethod.GET)
	public String initForm(Model model){
		FacultyForm facultyForm = new FacultyForm();
		model.addAttribute("facultyForm", facultyForm);
	    List<Tblfaculty> faculty = reportService.getAllFaculty();
		model.addAttribute("faculty", faculty);
		references(model);
		return "admin_add_faculty";
	}
	
	@RequestMapping(method=RequestMethod.POST)
	public RedirectView submitForm(Model model, @Validated @ModelAttribute("facultyForm") FacultyForm facultyForm, BindingResult bindingResult){
		model.addAttribute("facultyForm", facultyForm);
		
		RedirectView redirectView = new RedirectView();
		redirectView.setContextRelative(true);
		redirectView.setUrl("/smp/admin_add_faculty.html");
		
		List<Tblfaculty> faculty = reportService.getAllFaculty();
		model.addAttribute("faculty", faculty);
		
	    references(model);
	    
		if(bindingResult.hasErrors()) {
			facultyForm = new FacultyForm();
			model.addAttribute("facultyForm", facultyForm);
			
		} else{
			managementService.addFaculty(facultyForm);
			facultyForm = new FacultyForm();
			model.addAttribute("facultyForm", facultyForm);
			
		}
		return redirectView;
	}
	
	public void references(Model model){
		
		List<Integer> deptId = new ArrayList<Integer>();
		for(Tbldepartment dept : reportService.getAllDepartment()){
			deptId.add(dept.getDepartmentId());
		}
		model.addAttribute("deptId", deptId);
		
				
	}

}