/*
 * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */
import java.net.*;
import java.io.*;

class KKProtocol {
    private static final int WAITING = 0;
    private static final int SENTKNOCKKNOCK = 1;
    private static final int SENTCLUE = 2;
    private static final int ANOTHER = 3;

    private static final int NUMJOKES = 5;

    private int state = WAITING;
    private int currentJoke = 0;

    private String clues[] = { "Turnip", "Little Old Lady", "Atch", "Who", "Who" };
    private String answers[] = { "Turnip the heat, it's cold in here!",
				 "I didn't know you could yodel!",
				 "Bless you!",
				 "Is there an owl in here?",
				 "Is there an echo in here?" };

    String processInput(String theInput) {
	String theOutput = null;

	if (state == WAITING) {
	    theOutput = "Knock Knock!";
	    state = SENTKNOCKKNOCK;
	} else if (state == SENTKNOCKKNOCK) {
	    if (theInput.equalsIgnoreCase("Who's There?")) {
		theOutput = clues[currentJoke];
		state = SENTCLUE;
	    } else {
		theOutput = "You're supposed to say \"Who's There?\"! Try again. Knock Knock!";
	    }
	} else if (state == SENTCLUE) {
	    if (theInput.equalsIgnoreCase(clues[currentJoke] + " who?")) {
		theOutput = answers[currentJoke] + " Want another? (y/n)";
		state = ANOTHER;
	    } else {
		theOutput = "You're supposed to say \"" + clues[currentJoke] + " who?\"" + "! Try again. Knock Knock!";
		state = SENTKNOCKKNOCK;
	    }
	} else if (state == ANOTHER) {
	    if (theInput.equalsIgnoreCase("y")) {
	        theOutput = "Knock Knock!";
		if (currentJoke == (NUMJOKES - 1))
		    currentJoke = 0;
		else
		    currentJoke++;
	        state = SENTKNOCKKNOCK;
	    } else {
		theOutput = "Bye";
	        state = WAITING;
	    }
	}
	return theOutput;
    }
}
