package client;

import jade.core.behaviours.FSMBehaviour;

public class AppletAgentQIBehaviourFSM extends FSMBehaviour
{
	//FSM states
	private static final String WAITING_QI_STATE = "waiting_qi";
	private static final String OBTAIN_QI_STATE = "obtain_qi";
	private static final String SEND_PA_STATE = "send_pa";
	private static final String WAITING_PA_STATE = "waiting_pa";
	private static final String SEND_TA_STATE = "send_ta";
	private static final String WAITING_TA_STATE = "waiting_pa";
	private static final String SHOW_QI_STATE = "show_qi";
	private static final String FINAL_STATE = "final";
	
	
	//Return values
	private int WAITING_QI_RETURN = 0;
	private int OBTAIN_QI_RETURN = 1;
	private int SEND_PA_RETURN = 2;
	private int WAITING_PA_RETURN = 3;
	private int SEND_TA_RETURN = 4;
	private int WAITING_TA_RETURN = 5;
	private int SHOW_QI_RETURN = 6;
	private int FINAL_RETURN = 7;
	
	public AppletAgentQIBehaviourFSM()
	{
		//Register states
		registerFirstState(new AppletAgentQIBehaviourFSM_WaitingQI() , WAITING_QI_STATE );
		registerState(new AppletAgentQIBehaviourFSM_ObtainQI(), OBTAIN_QI_STATE);
		registerState(new AppletAgentQIBehaviourFSM_SendPA(), SEND_PA_STATE);
		registerState(new AppletAgentQIBehaviourFSM_WaitingPA(), WAITING_PA_STATE);
		registerState(new AppletAgentQIBehaviourFSM_SendTA(), SEND_TA_STATE);
		registerState(new AppletAgentQIBehaviourFSM_WaitingTA(), WAITING_TA_STATE);
		registerState(new AppletAgentQIBehaviourFSM_ShowQI(), SHOW_QI_STATE);
		registerLastState(new AppletAgentQIBehaviourFSM_Final(), FINAL_STATE);
		
		//Register transitions
		registerTransition(WAITING_QI_STATE,OBTAIN_QI_STATE,WAITING_QI_RETURN);
		registerTransition(OBTAIN_QI_STATE,SEND_PA_STATE,OBTAIN_QI_RETURN);
		registerTransition(SEND_PA_STATE,WAITING_PA_STATE,SEND_PA_RETURN);
		registerTransition(WAITING_PA_STATE,SEND_TA_STATE,WAITING_PA_RETURN);
		registerTransition(SEND_TA_STATE,WAITING_TA_STATE,SEND_TA_RETURN);
		registerTransition(WAITING_TA_STATE,SHOW_QI_STATE,WAITING_TA_RETURN);
		registerTransition(SHOW_QI_STATE,WAITING_QI_STATE,SHOW_QI_RETURN);
		
		registerTransition(WAITING_QI_STATE,FINAL_STATE,FINAL_RETURN);
		
		scheduleFirst();
	}
}
