<?php
/**
* File containing the Automating Class.
*
* @version 1.0 Initialisation of this file
* @since 1.0 Core application's file
* 
* @author Evan Pisani 'yogg at epsina . com' et bhupi
* 
* @todo Complete the functions with errors detection and finish the descriptions
*/

include("CoreInterface.php");
include("Image.php");
include("Network.php");
include("Compute.php");

class automating implements Core{

	/** @var App $app protected, contains the main app object */
	protected $appCompute;
	protected $appImage;
	protected $appNetwork;
	protected $appIdentity;
	protected $app;
	
	/**
	* Our library's app constructor for all server app objects
	*
	* @param App $app the main app object, e.g. compute, image, network, etc.
	*
	* @return
	*/
	public function __construct($app){
		if(!isset($app)){
			$this->app->setOutput("Error", "Parameter app missing.");
		}
		$this->appCompute = $appCompute;
		$this->appImage = $appImage;
		$this->appNetwork = $appNetwork;
		$this->appIdentity = $appIdentity;
		$this->app = $app;
	}

	/**
	* Execute an action
	*
	* @param String $action name of another function of this class
	*
	* @return void
	*/
	public function action($action){
		 $this->{$action.""}();	
	}

	public function script()
	{
		$opt = Array();
		$opt['name'] = getPostParam('name');

		appImage->setPostParam('opt' $opt);	
		appImage->createImage();
		
		appNetwork->create_network();
		appnetwork->list_network_ids();
		appNetwork->create_subnet();
		
		appCompute->listFlavors(); //to show all flavors with detail.
		appCompute->listImages(); //to show all images with detail and to verify that the image was created successfully by the call above.
		
		appCompute->setPostParam("name","Test");
		appCompute->setPostParam("imageId","CREATED_ABOVE");
		appCompute->setPostParam("flavorId","1");
		appCompute->createServer();
		
	}
	
	private function createServer()
	{
		$imageName = $this->app->getPostParam('imageName');
		$serverName = $this->app->getPostParam('serverName');
		$flavor = $this->app->getPostParam('flavor');

		// Création image
		$opt = Array();
		$opt['name'] = $imageName;
		$this->app->setPostParam('opt' $opt);	
		$this->appImage->createImage();
		$image = json_decode($this->app->show(), true)["Images"];

		// Création server
		$this->app->setPostParam('name', $serverName);
		$this->app->setPostParam('imageId', $image['id']);
		$this->app->setPostParam('flavorId', $flavor);
		$this->appNetwork->createServer();

		// Ajout adresse IP public 

	}
}

?>