<?php defined('SYSPATH') or die('No direct access allowed.');
/**
 * This class provides Host Server functions
 *
 * @package    OSB
 * @subpackage HostServer
 * @category   Controllers/Task
 * @author     Deon George
 * @copyright  (c) 2010 Deon George
 * @license    http://dev.leenooks.net/license.html
 */
class Controller_Task_Host extends Controller_Task {
	// Host Server Object
	private $hs;

	public function __construct(Request $request, Response $response) {
		parent::__construct($request,$response);

		// To make it easy for some methods, we'll load our service here
		switch (Request::current()->action()) {
			case 'getclient':
			case 'getservice':
			case 'provision':
				$sid = $this->request->param('id');

				$hso = ORM::factory('service',$sid)->plugin()->host_server;
				require Kohana::find_file('vendor',$hso->provision_plugin);
				$this->hs = new $hso->provision_plugin($hso);

				break;
		}
	}

	/**
	 * Get Client Details from Host Server
	 */
	public function action_getclient() {
		$sid = $this->request->param('id');

		print_r((string)$this->hs->get_client(ORM::factory('service',$sid)));
	}

	/**
	 * Get Client Details from Host Server
	 */
	public function action_getservice() {
		$sid = $this->request->param('id');

		print_r((string)$this->hs->get_service(ORM::factory('service',$sid)));
	}

	/**
	 * List services that need to be provisioned
	 */
	public function action_provisionlist() {
		$mode = $this->request->param('id');
		$cats = array();

		if ($mode)
			$cats = ORM::factory('product_category')->list_bylistgroup($mode);

		foreach (ORM::Factory('service')->list_provision()->find_all() as $so) {
			$pc = array();

			// Limit to show only those by the requested category.
			if ($cats) {
				if (! $so->product->avail_category OR ! preg_match('/^a:/',$so->product->avail_category))
					continue;

                        	$pc = unserialize($so->product->avail_category);

				if (! array_intersect($pc,array_keys($cats)))
					continue;
			}

			echo $so->id();

			switch ($mode) {
				case 'host':
					printf(' %s %s %s',$so->plugin(),$so->plugin()->host_server->name,$so->service_name());
					break;

				default:
			}
			echo "\n";
		}
	}

	/**
	 * Add a domain for the client
	 *
	 * @param int $id Hosting ID (in OSB)
	 * @return unknown_type
	 */
	public function action_provision() {
		$sid = $this->request->param('id');
		$so = ORM::factory('service',$sid);

		// Provision Account
		// @todo Need a test to see if an account alerady exists.
/*
		$result = $this->hs->add_client($so);
		print_r((string)$result);

		// Next need to get the ID from the account call to set the IP
		$result = $this->hs->setip(35); // @todo change this number
		print_r((string)$result);

		// Provision Domain
		$result = $this->hs->add_service($so);
		print_r((string)$result);

		// Set Limits
		$result = $this->hs->setlimits($so);
		print_r((string)$result);

		// Next need to get the ID for the domain to disable mail
		$result = $this->hs->disablemail(43);
		print_r((string)$result);
*/
	}
}
?>