<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * This class supports Product Plugins.
 *
 * @package    Product/Plugin
 * @category   Models
 * @author     Deon George
 * @copyright  (c) 2009-2013 Open Source Billing
 * @license    http://dev.osbill.net/license.html
 */
abstract class Model_Product_Plugin extends ORM_OSB {
	// Reset any sorting that may be defined in our parent
	protected $_sorting = array();

	/**
	 * The cost of this service
	 */
	abstract public function cost($annual=FALSE);

	/**
	 * Return the name of the plugin
	 */
	protected function plugin() {
		return strtolower(preg_replace('/(.*)_([a-zA-Z]+)$/',"$2",get_class($this)));
	}

	/**
	 * Get all the products using this plugin
	 */
	public function products($active=FALSE) {
		$x = ORM::factory('Product')
			->where('prod_plugin_file','=',$this->plugin())
			->and_where('prod_plugin_data','=',$this);

		if ($active)
			$x->where_active();

		return $x->find_all();
	}

	/**
	 * Form info for admins to update with plugin data
	 */
	abstract public function render_edit();

	/**
	 * Form used during service ordering
	 */
	public function render_order() {
		return View::factory(sprintf('product/plugin/%s/order',$this->plugin()));
	}

	/**
	 * View the details of the product
	 */
	public function render_view() {
		return View::factory(sprintf('product/plugin/%s/view',$this->plugin()))->set('o',$this);
	}

	abstract public function supplier();
}
?>
