package controller;

import HibernateEntities.ClientsEntity;
import HibernateEntities.GroupsEntity;
import HibernateEntities.ModeratorsEntity;
import HibernateEntities.StudentsEntity;
import LoginEntities.LoginUser;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

import static EntitiesDao.AdminDao.checkIsAdmin;
import static EntitiesDao.AdminDao.createNewAdmin;
import static EntitiesDao.ClientsDao.checkIsClient;
import static EntitiesDao.GroupDao.getGroupList;
import static EntitiesDao.StudentDao.checkIsStudent;
import static EntitiesDao.StudentDao.createNewStudent;
import static EntitiesDao.ClientsDao.createNewClient;

/**
 * Created by Кинетик on 02.01.2017.
 */
@Controller
public class registrationController {
    ModelAndView mvUsers = new ModelAndView();
    ModelAndView mvRegAdmin = new ModelAndView("registrationViews/regAdminPage");
    ModelAndView mvRegClient = new ModelAndView("registrationViews/regClientPage");
    ModelAndView mvRegStudent = new ModelAndView("registrationViews/regStudentPage");
    {
        mvUsers.setViewName("loginViews/index");
        mvUsers.addObject("userJSP", new LoginUser());
    }
    @RequestMapping(value="/registrate")
    public ModelAndView registrationUser(){
        return new ModelAndView("registrationViews/registration");
    }
    @RequestMapping(value="/regStudent")
    public ModelAndView regStudentLink(){
        List<GroupsEntity> groupList = getGroupList();
        mvRegStudent.addObject("groupList",groupList);
        mvRegStudent.addObject("student", new StudentsEntity());
        return mvRegStudent;
    }
    @RequestMapping(value="/regClient")
    public ModelAndView regClientLink(){
        mvRegClient.addObject("client", new ClientsEntity());
        return mvRegClient;
    }
    @RequestMapping(value="/regAdmin")
    public ModelAndView regAdminLink(){
        mvRegAdmin.addObject("admin",new ModeratorsEntity());
        return mvRegAdmin;
    }
    @RequestMapping(value="/regStudentAction")
    public ModelAndView regStudentAction(@ModelAttribute("student") StudentsEntity student){
        mvRegStudent = new ModelAndView("registrationViews/regStudentPage");
        student.setStFamily(student.getStFamily().trim());
        student.setStFirstName(student.getStFirstName().trim());
        student.setStSecName(student.getStSecName().trim());
        student.setStPkNumber(student.getStPkNumber().trim());
        boolean errors = false;
        if(student.getStFirstName().equals("")){
            mvRegStudent.addObject("nameMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(student.getStFamily().equals("")){
            mvRegStudent.addObject("famMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(student.getStSecName().equals("")){
            mvRegStudent.addObject("secNameMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(student.getStPkNumber().equals("")){
            mvRegStudent.addObject("passMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(!errors && checkIsStudent(student)){
            mvRegStudent.addObject("errMessage","Студент с такими данными уже зарегистрирован в системе");
            errors = true;
        }
        if(errors){
            return mvRegStudent;
        }
        createNewStudent(student);
        mvUsers.addObject("message","registration of student done");
        return mvUsers;
    }
    @RequestMapping(value="/regClientAction")
    public ModelAndView regClientAction(@ModelAttribute("client") ClientsEntity client){
        mvRegClient = new ModelAndView("registrationViews/regClientPage");
        client.setClFamily(client.getClFamily().trim());
        client.setClFirstName(client.getClFirstName().trim());
        client.setClSecName(client.getClSecName().trim());
        client.setClPassword(client.getClPassword().trim());
        boolean errors = false;
        if(client.getClFamily().equals("")){
            mvRegClient.addObject("famMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(client.getClFirstName().equals("")){
            mvRegClient.addObject("nameMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(client.getClSecName().equals("")){
            mvRegClient.addObject("secNameMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(client.getClPassword().equals("")){
            mvRegClient.addObject("passMessage","Это поле обязательно для заполнения");
            errors = true;
        }
        if(!errors && checkIsClient(client)){
            mvRegClient.addObject("errMessage","Пользовтаель с такими данными зарегистрирован в системе");
            errors = true;
        }
        if(errors){
            return mvRegClient;
        }
        createNewClient(client);
        mvUsers.addObject("message","registration of client done");
        return mvUsers;
    }
    @RequestMapping(value="/regAdminAction")
    public ModelAndView regAdminAction(@ModelAttribute("admin") ModeratorsEntity admin){
        mvRegAdmin = new ModelAndView("registrationViews/regAdminPage");
        admin.setModPhone(admin.getModPhone().trim());
        admin.setModFamily(admin.getModFamily().trim());
        admin.setModFirstName(admin.getModFirstName().trim());
        admin.setModSecName(admin.getModSecName().trim());
        admin.setModPassword(admin.getModPassword().trim());
        boolean errors=false;
        if(admin.getModFamily().equals("")){
            mvRegAdmin.addObject("famMessage","Это поле обязательно для заполнения");
            errors=true;
        }
        if(admin.getModFirstName().equals("")){
            mvRegAdmin.addObject("nameMessage","Это поле обязательно для заполнения");
            errors=true;
        }
        if(admin.getModSecName().equals("")){
            mvRegAdmin.addObject("secNameMessage","Это поле обязательно для заполнения");
            errors=true;
        }
        if(admin.getModPassword().equals("")){
            mvRegAdmin.addObject("phoneMessage","Это поле обязательно для заполнения");
            errors=true;
        }
        if(admin.getModPassword().equals("")){
            mvRegAdmin.addObject("passMessage","Это поле обязательно для заполнения");
            errors=true;
        }
        if(admin.getModBirthdate().equals("дд.мм.гггг")){
            mvRegAdmin.addObject("birthMessage","Это поле обязательно для заполнения");
            errors=true;
        }
        if(!errors && checkIsAdmin(admin)){
            mvRegAdmin.addObject("errorMessage","Пользователь с такими данными зарегистрирован в системе");
            errors=true;
        }
        if(errors){
            return mvRegAdmin;
        }
        createNewAdmin(admin);
        mvUsers.addObject("message","registration of admin done");
        return mvUsers;
    }
}
