//
//  ConfigurationTarget.h
//  Clock Signal
//
//  Created by Thomas Harte on 08/09/2016.
//  Copyright © 2016 Thomas Harte. All rights reserved.
//

#ifndef ConfigurationTarget_hpp
#define ConfigurationTarget_hpp

#include "../StaticAnalyser/StaticAnalyser.hpp"

namespace ConfigurationTarget {

/*!
	A ConfigurationTarget::Machine is anything that can accept a StaticAnalyser::Target
	and configure itself appropriately, or accept a list of media subsequently to insert.
*/
class Machine {
	public:
		/// Instructs the machine to configure itself as described by @c target and insert the included media.
		virtual void configure_as_target(const StaticAnalyser::Target &target) = 0;

		/*!
			Requests that the machine insert @c media as a modification to current state

			@returns @c true if any media was inserted; @c false otherwise.
		*/
		virtual bool insert_media(const StaticAnalyser::Media &media) = 0;
};

}

#endif /* ConfigurationTarget_h */
