import template, random

class One(template.Engine):

  def __init__(self):
    template.Engine.__init__(self)

  def retrieveState(self):
    # print "I am retrieving state..."
    (message, n1, n2, m1, m2) = ("", "", "", "", "")
    if self.input.has_key("message"): message = self.input["message"].value
    if self.input.has_key("n1"): n1 = self.input["n1"].value
    if self.input.has_key("n2"): n2 = self.input["n2"].value
    if self.input.has_key("m1"): m1 = self.input["m1"].value
    if self.input.has_key("m2"): m2 = self.input["m2"].value
    return MyState(message, n1, n2, m1, m2)    

  def reset(self): 
    reset = ""
    if self.input.has_key("reset"): reset = self.input["reset"].value
    return reset     

  def initializeState(self, s): 
    # print "I am being asked to initialize the state..."
    s.message = "Welcome"
    s.n1 = str(random.randrange(-50, 50))
    s.n2 = str(random.randrange(-50, 50))
    s.m1 = "0"
    s.m2 = "0"

  def updateState(self, s):
    # print "I am being asked to update the state based on input..."
    answer = ""
    if self.input.has_key("answer"): answer = self.input["answer"].value
    if answer and int(answer) == int(s.n1) + int(s.n2):
      s.message = "Very good."
      s.m1 = str(int(s.m1) + 1)
    else:
      s.message = "No, no, no."
    s.m2 = str(int(s.m2) + 1)
    s.message += "Score now: " + s.m1 + " out of " + s.m2
    s.n1 = str(random.randrange(-50, 50))
    s.n2 = str(random.randrange(-50, 50))     

  def saveState(self, s):
    print "<form>" 
    print "<input type=hidden name=message value=\"" + s.message + "\">"
    print "<input type=hidden name=n1 value=\"" + s.n1 + "\">" 
    print "<input type=hidden name=n2 value=\"" + s.n2 + "\">" 
    print "<input type=hidden name=m1 value=\"" + s.m1 + "\">" 
    print "<input type=hidden name=m2 value=\"" + s.m2 + "\">" 

  def reportState(self, s):
    print s.message + "<p>"
    print "Whaat is " + s.n1 + " + " + s.n2 + "?"

  def getReadyforMoreInput(self):
    print "Answer: <input type=text name=answer> <p>"
    print "<input type=submit name=submit value=Proceed>"
    print "<input type=submit name=reset value=Reset>"
    print "</form>"

class MyState(template.State): 
  def __init__(self, message, n1, n2, m1, m2): 
    self.message = message 
    self.n1 = n1
    self.n2 = n2
    self.m1 = m1
    self.m2 = m2    
  def isEmpty(self): 
    # print "I am being asked if I am empty..."
    return not self.message