package javacodebook.server.cookie;

import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
 *  Ein dauerhafter Cookie wird gesetzt und ein Benutzer anhand dessen beim
 *  nächsten Besuch wieder identifiziert.
 */
public class IdentServlet extends HttpServlet {

    //Einfache Hilfskonstruktion, um Benutzer zu verwalten wiederzuerkennen
    private static Hashtable users = new Hashtable();

    protected void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, java.io.IOException {
        res.setContentType("text/html");
        java.io.PrintWriter out = res.getWriter();
        out.println("<html>");
        out.println("<body>");

        //Es können mehrere Cookies vorhanden sein, alle werden überprüft
        Cookie[] cookies = req.getCookies();
        String userName = null;
        for(int i = 0; i < cookies.length; i++) {
            if("userID".equals(cookies[i].getName()))
                userName = cookies[i].getValue();
        }

        //wenn der Cookie nicht gesetzt war und auch gerade keine Anmeldung
        //stattfindet, wird ein Anmeldeformular gezeigt.
        if(userName == null && req.getParameter("name") == null)
            showForm(out);

        //Bei der Anmeldung wird der Cookie gesetzt, die Lebensdauer wird auf
        //ein Jahr eingestellt
        else if(req.getParameter("name") != null) {
            userName = req.getParameter("name");
            Cookie cookie = new Cookie("userID", userName);
            cookie.setMaxAge(60*60*24*365);//Lebensdauer in sec: 60*60*24*365 = 1 Jahr
            res.addCookie(cookie);

            out.println("Willkommen, " + userName + "<br>");
            out.println("Beim nächsten Besuch werden Sie wieder mit Namen begrüßt");
        }
        //Begrüßung, wenn der Benutzer erkannt wurde
        else {
            out.println("Willkommen, " + userName + "<br>");
            out.println("Schön, dass Sie wieder hier sind!");
        }
        out.println("</body>");
        out.println("</html>");
    }

    private void showForm(java.io.PrintWriter out) {
        out.println("<form>");
        out.println("Bitte geben Sie Ihren Namen ein: ");
        out.println("<input type=text name=name size=20><br>");
        out.println("<input type=submit value=Weiter>");
        out.println("</form>");
    }
}
