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

public class Courses extends HttpServlet {

	String stringCn;
	String stringDescription;
	String stringL;
	
	public Courses () {
		stringCn = new String ("cn");
		stringDescription = new String ("description");
		stringL = new String ("l");
	}

		
	public void doPost(HttpServletRequest request,HttpServletResponse response)
		throws IOException, ServletException {
		doGet (request,response);
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws IOException, ServletException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<html><head><title>Wahlpflichtkurse (j)</title></head><body bgcolor=\"#FFFFFF\">");
		out.println("<h2>Wahlpflichtkurse</h2>");
	out.println("<h3><font style=\"font-family:Arial, Verdana, Helvetica, Helv;\" color=\"red\">Das Einloggen geschieht mit &quot;Username&quot; (also NICHT &quot;Username.studenten.vetmed.uni-muenchen&quot; und auch NICHT mit &quot;cn=Username, ou=Studenten, ou=Vetmed, o=uni-muenchen&quot;). Siehe auch <a href=\"http://www.vetmed.uni-muenchen.de/studium/wahlpflicht/kurse/\">Hinweise</a></font>.</h3>");
		out.println("<p>Bei Problemen bitte Mail an webmaster@vetmed.uni-muenchen.de");
		
		ChangeManager cm = new ChangeManager();
		
		String term = request.getParameter("term");
		if (null != term) term = new String (term.trim());
		String course = request.getParameter ("course");
		String student = request.getParameter ("student");
		if (null != student) student = new String (student.trim());
		String password = request.getParameter("password");
		if (password != null && 0 == password.length()) {
			out.println ("<p>Leere Passwoerter werden nicht akzeptiert.");
		} else {
		
		/* no arguments */
		
		out.println("<br><form method=get action=\"" + cm.getURL() + "\">Hauptmenu: "
			+ "Zielsemesterzahl kommendes Semester " 
			+ "(z.B.: 01,02,03,...): " 
			+ "<input type=text name=term"
			+ " maxlength=4 size=2><input type=submit><input type=hidden name=course value=\"\"></form>");

		if (term == null || 0 == term.length()) 
			out.println ("<p>Keine Zielsemesterzahl gewaehlt. Bitte geben Sie auf "
				+	"dem Formular die Semesterzahl an, die f&uuml;r Sie ab kommendem "
				+ "Semester (f&uuml;r das Sie die Kurse w&auml;hlen) gilt");
		else {
		
			/* a term has been selected */
			out.println ("<!--term selected-->");
			if (term.length() == 1) term = new String ("0" + term);
			
			if (course == null || 0==course.length()) { 
				out.println ("<hr>F&uuml;r das Zielsemester " + term + " werden "
					+ " folgende Kurse angeboten.<p>");
				out.println("<table>\n");
				out.println("\n<tr><td>Kursname</td><td>Beschreibung</td>" 
						+ "<td>max. Teilnehmerzahl</td></tr>");
				List l = cm.getCourseList (term);
				ListIterator li = l.listIterator();
				while (li.hasNext()) {
					HashMap h = (HashMap)li.next();
					out.print ("\n<tr><td><a href=\"" + cm.getURL() + "?term="+term+"&course="+((List)h.get(stringCn)).get(0)+"\">");	
					out.print (((List)h.get(stringCn)).get(0) + ". " + ((List)h.get(stringCn)).get(1) + "</a>");
					out.print ("</td><td>"+((List)h.get(stringDescription)).get(0));
					out.print ("</td><td>"+((List)h.get(stringL)).get(0)+"</td></tr>");
				}
				out.println("</table>\n");
			} else {
				
			/* a term and a course have been selected */
			out.println ("<!--term and course selected-->");
				
				if (null != request.getParameter("Einschreiben")) {
					//KLUDGE: Sperrung/Oeffnung || term.equals ("02")
					if (true || student.substring(0,7).equals ("teststud")) {
						if (cm.checkPassword (student, password)) {
							if (cm.isRegistered (term, course, student)) 
								out.println ("<h1>Fehler: Sie sind bereits f&uuml;r diesen Kurs regis"
									+ "triert und k&ouml;nnen sich nicht erneut registrieren</h1>");
							else {
								if (false && !cm.isOpen (term, course) ) 
									out.println ("<h1>Fehler: Keine freien Pl&auml;tze mehr/Einschreibefrist abgelaufen</h1>");
								else 
									cm.register (term, course, student);
							}
						} else {
							out.println ("<h1>Fehler: Das Passwort stimmt nicht!</h1>");
						}
					} else {
						out.println ("<h1>Fehler: Einschreibung z.Zt. nicht aktiviert!</h1>");
					}
					//out.println (cm.showErrors());
				}
		
				if (null != request.getParameter("Ausschreiben")) {
					if (cm.checkPassword (student, password)) {
						if (!cm.isRegistered (term, course, student))
							out.println ("<h1>Fehler: Sie waren nicht f&uuml;r diesen Kurs regis"
							+ "triert und k&ouml;nnen sich also garnicht ausschreiben\n</h1>");
						else cm.unregister (term, course, student);
						} else {
							out.println ("<h1>Fehler: Das Passwort stimmt nicht!</h1>");
					}
					
					//out.println (cm.showErrors());
				}
			
				out.println ("<h3>Kursdetails: ");
				out.println ("Semester: " + term + ", Kurs-Nr: " + course + "</h3>"); 
				out.println("<table>\n");
				out.println("\n<tr><td>Kursname</td><td>Beschreibung</td>" 
						+ "<td>max. Teilnehmerzahl</td></tr>");
				HashMap h = cm.getCourseDetails(term, course);
				out.print ("\n<tr><td>"+((List)h.get(stringCn)).get(1));	
				out.print ("</td><td>"+((List)h.get(stringDescription)).get(0));
				out.print ("</td><td>"+((List)h.get(stringL)).get(0)+"</td></tr>");
				out.println("</table>\n");
				out.println ("\n<h3>Teilnehmerliste</h3><ol>");
				List l = cm.getCourseStudents(term, course, 1);
				ListIterator li = l.listIterator();
				while (li.hasNext()) {
					out.println ("<li>" + (String)li.next() + "</li>");
				}
				out.println("\n</ol><p>Ende der Teilnehmerliste");
				out.println("\n<h3>Ein-/Ausschreibung</h3>");
				out.println("\n<p><form action=" + cm.getURL() 
						+ " method=" + cm.getMethod() + ">"
						+ "\n   <input type=hidden name=term value=" + term + ">"
						+ "\n   <input type=hidden name=course value=" + course + ">"
						+ "\n   UserID <input type=text name=student size=12 maxlength=30>"
						+ "\n   Passwort <input type=password name=password " 
						+ "size=12 maxlength=30>"
						+ "\n   <input type=submit name=Einschreiben value=Einschreiben>"
						+ "\n   <input type=submit name=Ausschreiben value=Ausschreiben>"
						+ "\n   <input type=reset value=Abbrechen>"
						+ "\n  </form></td></tr>");
			}
		}/*password check*/
		}
		cm.disconnect();
		out.println("<p><hr>");
		Date dt = new Date();
		out.println( dt ); 
		out.println("</body></html>");
		out.close();
	}
}
