package demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello Spring";
    }

    @RequestMapping("/osoba")
    @ResponseBody
    public Osoba jakasOsoba() {
        return new Osoba("Ala", "Kowalska", 30);
    }

    @RequestMapping("/time1")
    @ResponseBody
    public LocalDateTime time1() {
        return LocalDateTime.now();
    }

    @RequestMapping("/time2")
    @ResponseBody
    public String time2() {
        return LocalDateTime.now().toString();
    }

    private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");

    @RequestMapping("/time3")
    @ResponseBody
    public String time3() {
        return "<div style='border:5px solid blue; padding:1em; margin:1em; color:red; background-color:white'>" + LocalDateTime.now().format(DATE_FORMAT) + "</div>";
    }

    // Jeśli chcemy, aby wynik metody został potraktowany jako odpowiedź i odesłany do klienta,
    // należy użyć adnotacji @ResponseBody. Wynik typu String (i nie tylko, np. byte[] też) jest odsyłany literalnie,
    // natomiast obiekty nieznanych klas (np. Osoba) są zamienianie na JSON.

    // Gdy metoda kontrolera zwraca String, a nie ma adnotacji @ResponseBody,
    // to ten String jest traktowany jako nazwa szablonu.
    // Szablony to pliki, które definiują zwracaną zawartość HTML.
    // Różne sposoby pisania szablonów: JSP, Struts, Tiles, Velocity, Thymeleaf, FreeMarker, Mustache...
    @RequestMapping("/stronka")
    public String wyswietlSzablon() {
        return "szablon.html";
    }

    @RequestMapping("/time4")
    public String time4(Model model) {
        LocalDateTime czas = LocalDateTime.now();
        model.addAttribute("dt", czas);
        return "wyswietl_czas.html";
    }


}
