package net.sevecek.zakladniwebapp;

import javax.validation.*;
import org.springframework.stereotype.*;
import org.springframework.validation.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.*;

@Controller
public class HlavniController {

    @RequestMapping(value = "/stranka-bez-validace.html", method = RequestMethod.GET)
    public ModelAndView zobrazStrankuBezValidace() {
        // Prvnotni zobrazeni stranky
        ModelAndView drzacekNaSablonuAData;
        drzacekNaSablonuAData = new ModelAndView(
                "/WEB-INF/view/stranka-bez-validace.jsp");
        return drzacekNaSablonuAData;
    }

    @RequestMapping(value = "/stranka-bez-validace.html", method = RequestMethod.POST)
    public ModelAndView zpracujStrankuBezValidace(StrankaBezValidaceForm vyplnenyFormular) {
        // Druhotna reakce na odeslany formular a zobrazeni vysledku
        ModelAndView drzacekNaSablonuAData;
        drzacekNaSablonuAData = new ModelAndView("/WEB-INF/view/vysledek-bez-validace.jsp");

        String krestniJmeno = vyplnenyFormular.getKrestniJmeno();
        String prijmeni = vyplnenyFormular.getPrijmeni();

        String celeJmeno = krestniJmeno + " " + prijmeni;
        drzacekNaSablonuAData.addObject("kompletniJmeno", celeJmeno);

        return drzacekNaSablonuAData;
    }

    //-------------------------------------------------------------------------

    @RequestMapping(value = "/stranka-s-validaci.html", method = RequestMethod.GET)
    public ModelAndView zobrazStrankuSValidaci() {
        // Prvnotni zobrazeni stranky
        // Pozor, je nutne navic vlozit do stranky prazdny objekt formulare
        ModelAndView drzacekNaSablonuAData;
        drzacekNaSablonuAData = new ModelAndView(
                "/WEB-INF/view/stranka-s-validaci.jsp");

        StrankaSValidaciForm prazdnyFormular;
        prazdnyFormular = new StrankaSValidaciForm();
        drzacekNaSablonuAData.addObject("formular", prazdnyFormular);

        return drzacekNaSablonuAData;
    }

    @RequestMapping(value = "/stranka-s-validaci.html", method = RequestMethod.POST)
    public ModelAndView zpracujStrankuSValidaci(
            @Valid @ModelAttribute("formular") StrankaSValidaciForm vyplnenyFormular,
            Errors validacniChyby) {
        // Druhotna reakce na odeslany formular a zobrazeni vysledku
        if (validacniChyby.hasErrors()) {
            // V pripade, ze selze validace, pujde se touto vetvi programu:
            // Kod je (temer) stejny jako zobrazStrankuSValidaci()
            ModelAndView drzacekNaSablonuAData;
            drzacekNaSablonuAData = new ModelAndView(
                    "/WEB-INF/view/stranka-s-validaci.jsp");

            // Jen neni nutny drzacekNaSablonuAData.addObject("formular", vyplnenyFormular);
            // protoze stejny efekt ma @ModelAttribute("formular")

            return drzacekNaSablonuAData;
        }

        // V pripade, ze validace naopak projde v poradku,
        // muzeme vypocitat vysledky a zobrazit je
        ModelAndView drzacekNaSablonuAData;
        drzacekNaSablonuAData = new ModelAndView("/WEB-INF/view/vysledek-s-validaci.jsp");

        Integer cislo1 = vyplnenyFormular.getCislo1();
        Integer cislo2 = vyplnenyFormular.getCislo2();

        Integer soucet = cislo1 + cislo2;
        Integer soucin = cislo1 * cislo2;
        Integer rozdil = cislo1 - cislo2;
        Integer podil = cislo1 / cislo2;
        drzacekNaSablonuAData.addObject("plus", soucet);
        drzacekNaSablonuAData.addObject("krat", soucin);
        drzacekNaSablonuAData.addObject("minus", rozdil);
        drzacekNaSablonuAData.addObject("deleno", podil);

        return drzacekNaSablonuAData;
    }

}
