class XProblemGenerator
  
  constructor: (seed, @parameters={}) ->

    @random = new MersenneTwister(seed)

    @problemState = {}

  generate: () ->

    console.error("Abstract method called: XProblemGenerator.generate")

class XProblemDisplay

  constructor: (@state, @submission, @evaluation, @container, @submissionField, @parameters={}) ->

  render: () ->

    console.error("Abstract method called: XProblemDisplay.render")

  updateSubmission: () ->

    @submissionField.val(JSON.stringify(@getCurrentSubmission()))

  getCurrentSubmission: () ->
    console.error("Abstract method called: XProblemDisplay.getCurrentSubmission")

class XProblemGrader

  constructor: (@submission, @problemState, @parameters={}) ->

    @solution   = null
    @evaluation = {}

  solve: () ->

    console.error("Abstract method called: XProblemGrader.solve")

  grade: () ->

    console.error("Abstract method called: XProblemGrader.grade")

root = exports ? this

root.XProblemGenerator = XProblemGenerator
root.XProblemDisplay   = XProblemDisplay
root.XProblemGrader    = XProblemGrader