import jp.co.s34.fsm.Gate.*;
import java.io.*;

public class Gate implements Context {

  public void error(String state_name, String event_name) {
    System.out.println("error state=" + state_name +  " event=" + event_name);
  }
  public void Alarm(FSM fsm)         { System.out.println("金払え!!"); }
  public void EnterLocked(FSM fsm)   { System.out.println("ゲートが閉まりました"); }
  public void EnterUnlocked(FSM fsm) { System.out.println("ゲートが開きました"); }
  public void ExitLocked(FSM fsm)    { System.out.println("閉じた状態を終わります"); }
  public void ExitUnlocked(FSM fsm)  { System.out.println("開いた状態を終わります"); }
  public void Lock(FSM fsm)          { System.out.println("ゲートを閉めます"); }
  public void ThankYou(FSM fsm)      { System.out.println("ありがとうございます"); }
  public void Unlock(FSM fsm)        { System.out.println("ゲートを開けます"); }

  public static void main(String[] arg) throws Exception {
    Context context = new Gate();
    FSM     fsm = new FSM();
    fsm.setContext(context);

    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));    while ( true ) {
      System.out.println(fsm.getState().getName());
      System.out.print("enter an event :");
      String event_name = input.readLine();
      if ( event_name.equals("exit") ) break;
      else
      if ( event_name.equals("Coin") ) fsm.Coin();
      else
      if ( event_name.equals("Pass") ) fsm.Pass();
      else continue;
    }

  }
}

