import java.applet.*;
import java.awt.*;
import java.net.*;
import java.util.Date;

public class MCTProto extends Applet {
  // MCT information
  String username = "dummy";
  String script;
  Date start, end;

  // Control problems
  int number = 0;
  int maxnum = 5;

  // GUI
  Image images[];
  //ProbNumberPanel pnum;
  Label pnum;
  ProbImagePanel pimg;
  Choice ans;
  Label ap;
  Button sub;
  Label ml;

  // initialize
  public void init() {
    script = getParameter("script");

    setLayout(new BorderLayout());
    setBackground(Color.white);

    // Dipslay Part
    images = new Image[maxnum];
    Image img = getImage(getDocumentBase(),
			 "image/MCT.gif");
    for (int i=0;i<maxnum;i++) {
      images[i] = getImage(getDocumentBase(),
			   "image/Prob" + String.valueOf(i+1) + ".gif");
    }
    //pnum = new ProbNumberPanel(number);
    pnum = new Label("Introduction");
    pimg = new ProbImagePanel(img);
    add("North", pnum);
    add("Center", pimg);

    // Selection Part
    ap = new Label("Your answer is ");
    ans = new Choice();
    ans.addItem("notSelected");
    ans.addItem("1");
    ans.addItem("2");
    ans.addItem("3");
    ans.addItem("4");
    ans.addItem("5");
    sub = new Button("Go to next problem");
    Panel p = new Panel();
    p.setLayout(new FlowLayout());
    ans.setBackground(Color.white);
    p.add(ap);
    p.add(ans);
    p.add(sub);

    Panel p2 = new Panel();
    p2.setLayout(new BorderLayout());
    p2.add("North",p);
    ml = new Label("Script: " + script);
    p2.add("South",ml);
    add("South",p2);
    start = new Date();
  }

  public void nextProblem() {
    number++;
    Image img = getImage(getDocumentBase(),
			 "image/MCT.gif");
    if (number > maxnum) {
      pimg.setImage(img);
      pnum.setText("Test is done");
    } else {
      pimg.setImage(images[number-1]);
      pnum.setText("Problem: " + String.valueOf(number));
    }
    pnum.repaint();
    pimg.repaint();
    ans.select(0);
    //ans.repaint();
  }

  public void sendAnswer() {
    String sep = "_";
    int time = end.getSeconds() - start.getSeconds();
    try {
      String str = script + "?" + username + sep + String.valueOf(number) +
	sep + ans.getSelectedItem() + sep + String.valueOf(time);
      ml.setText("Sending to " + str);
      ml.repaint();
      URL url = new URL(str);
      //url.openConnection();
      //url.getContent();
      Frame status = new Frame("status");
      status.toBack();
      //getAppletContext().showDocument(url, "_parent");
      getAppletContext().showDocument(url, "status");
    } catch (Exception e) {
      ml.setText("Sending failed: " + e.getMessage());
      ml.repaint();
    }
  } 
    
  public boolean action(Event e, Object arg) {
    if (e.target instanceof Choice) {
      //setAnswer((String)arg);
    } else if (e.target instanceof Button) {
      if (number <= maxnum) {
	end = new Date();
	sendAnswer();
	nextProblem();
	start = new Date();
      }
    }
    return true;
  }
}

class ProbNumberPanel extends Label {
  public ProbNumberPanel(int number) {
    setText("Problem: " + String.valueOf(number));
  }
  public void setNumber(int number) {
    setText("Problem: " + String.valueOf(number));
  }
}

class ProbImagePanel extends Panel {
  Image image;
  public ProbImagePanel(Image img) {
    image = img;
  }

  public void setImage(Image img) {
    image = img;
  }

  public void paint(Graphics g) {
    g.drawImage(image, 1, 1, this);
  }
}

