package weblog;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.Enumeration;

import org.objectweb.jonathan.apis.kernel.Context;

import weblog.business.apis.EntriesReader;
import weblog.business.apis.AuthenticationService;

public class WebLog extends HttpServlet {

    EntriesReader reader;
    AuthenticationService auth = null;

    public WebLog() {
        Context initialContext = Startup.newConfiguration(WebLog.class);
        reader = (EntriesReader)initialContext.getValue("Entries Reader", (char)0);
        Object oAuth = initialContext.getValue("Authentication Service", (char)0);
        if (oAuth != Context.NO_VALUE) {
            auth = (AuthenticationService)oAuth;
        }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=iso-8859-1");
        PrintWriter pw = response.getWriter();

        printHeader(pw);

        for(Enumeration e = reader.getEntries(); e.hasMoreElements(); ) {
            String entry = (String)e.nextElement();
            pw.println("<p>" + entry + "</p>");
        }

        printInputForm(pw);
        printFooter(pw);

        pw.flush();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        boolean isok = true;

        if (auth != null) {
            isok = false;
            try {
                isok = auth.authenticate(request.getParameter("userid"),
                                         request.getParameter("passwd"));
            } catch (Exception ignored) {}

        }

        if (isok) {
            try {
                String text = request.getParameter("text");
                if (text != null) reader.addEntry(text);
            } catch (Exception ignored) {}
            doGet(request, response);
        } else {
            response.sendError(401); // unauthorised
        }

    }

    private void printHeader(PrintWriter pw) {
        pw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//HTML 4.01 Transitional//EN\">");
        pw.println("<html><head><title>WebLog</title>");
        pw.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">");
        pw.println("</head>");
        pw.println("<body><h1>WebLog</h1>");
    }

    private void printFooter(PrintWriter pw) {
        pw.println("</body></html>");
    }

    private void printInputForm(PrintWriter pw) {
        pw.println("<hr width=\"75%\">");
        pw.println("<form action=\"weblog\" method=\"POST\">");
        pw.println("<input type=\"text\" name=\"text\">");

        /** If auth is not null, we have an authentication method */
        if (auth != null) {
            pw.println("<br>");
            pw.println("<table><tr><td>Username</td><td>Password</td></tr>");
            pw.println("<tr><td><input type=\"text\" name=\"userid\"></td><td><input type=\"password\" name=\"passwd\"></td></tr></table>");
        }
        pw.println("<br><input type=\"submit\" value=\"Send\">");

        pw.println("</form>");
    }
}