<?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'
* 
* @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 $app;
	
	/** @var OpenStack\Identity $libClass protected, contains the library Identity object */
	protected $libClass;
	
	/**
	* Image constructor
	*
	* @param App $app the main app object
	*
	* @return Image
	*/
	public function __construct($app){
		if(!isset($app)){
			$this->app->setOutput("Error", "Incorrect parameter app");
		}
		$this->app = $app;
		$this->libClass = $app->getLibClass("Automating");
	}

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

	/**
	* Create a new image on a new server
	*
	* @param $error the error triggered
	*
	* @return Image the new image created
	*/
	private function createImageOnNewServer(){
		try{
			$image = new Image($this->app);
			$compute = new Compute($this->app);
			
			$name = $this->app->getPostParam("name");
			$falvor_id = $this->app->getPostParam("falvor_id"); // Compris entre 1 et 5 (1=petit serveur, 5=gros serveur)

			$opt = Array();
			$opt['name'] = $name;
			$opt['visibility'] = 'public';
			$opt['minDisk'] = 100; // A VOIR 
			$opt['minRam'] = 128; // A VOIR
			$opt['protected'] = false;

			$this->app->setPostParam("opt", $opt);

			$image->action("createImage");
			$res = json_decode($this->app->show(), true)["Images"];


			$this->app->setPostParam("name", $name);
			$this->app->setPostParam("imageId", $res['id']);
			$this->app->setPostParam("flavorId", $falvor_id);

			$compute->action("createServer");
			
		}catch(BadResponseError $e){
			$this->app->getErrorInstance()->BadResponseHandler($e);
	    }catch(UserInputError $e){
			$this->app->getErrorInstance()->UserInputHandler($e);
	    }catch(BaseError $e){
			$this->app->getErrorInstance()->BaseErrorHandler($e);
	    }catch(NotImplementedError $e){
			$this->app->getErrorInstance()->NotImplementedHandler($e);
	    }catch(Exception $e){
        	$this->app->getErrorInstance()->OtherException($e);
        }
        $this->app->setOutput("Auto", $res);
	}
}

?>