#ifndef CHECKPIN_H_
#define CHECKPIN_H_

// Author: Steve Talbot

#pragma once

#include "State.h"

using namespace std;

class CheckPin : public State {

public:
	CheckPin();
	virtual ~CheckPin();

	virtual bool correct_pin( bool isAboveMinBalance_, bool isActive_, int& nextStateId_  );
	virtual bool incorrect_pin( bool attemptsRemain_, int& nextStateId_  );
	virtual bool attempts_remain();
	virtual bool too_many_attempts( int& nextStateId_ );
	virtual bool active( bool isAboveMinBalance_, int& nextStateId_  );
	virtual bool inactive( int& nextStateId_ );
	virtual bool above_min_balance( int& nextStateId_ );
	virtual bool below_min_balance( int& nextStateId_ );

	// these methods have empty implementation,
	// since they are not used in the "CheckPin" state ..
	// these are only necessary if the parent class defines these
	// methods as "abstract" (i.e.: pure virtual) methods ..
/*
	virtual bool correct_login( int& nextStateId_ );										// Idle();
	virtual bool incorrect_login();															// Idle();
	virtual bool logout( int& nextStateId_ );												// Inactive(); Overdrawn(); Ready();

	virtual bool correct_pin( int& nextStateId_ );											// Overdrawn(); Ready();
	virtual bool correct_pin( bool isAboveMinBalance_, int& nextStateId_ );					// Inactive();

	virtual bool incorrect_pin();															// Inactive(); Overdrawn(); Ready();

	virtual bool activate( bool isPinCorrect_, bool isAboveMinBalance_, int& nextStateId );	// Inactive();
	virtual bool deactivate( bool isPinCorrect_, int& nextStateId_ );						// Overdrawn(); Ready();

	virtual bool balance();																	// Inactive(); Overdrawn(); Ready();
	virtual bool withdraw( bool isLessThanMinBalance_, int& nextStateId_ );					// Inactive(); Overdrawn(); Ready();
	virtual bool deposit( bool isLessThanMinBalance_, int& nextStateId_ );					// Inactive(); Overdrawn(); Ready();

	virtual bool diff_more_or_equal_to_min_balance();										// Ready();
	virtual bool diff_less_than_min_balance( int& nextStateId_ );							// Ready();

	virtual bool sum_more_or_equal_to_min_balance( int& nextStateId_ );						// Overdrawn();
	virtual bool sum_less_than_min_balance();												// Overdrawn();
*/

};

#endif /*CHECKPIN_H_*/
