<?php namespace Laravel\Session;

use Laravel\Config;

class Manager {

	/**
	 * The active session driver.
	 *
	 * @var Session\Driver
	 */
	public static $driver;

	/**
	 * Get the session driver.
	 *
	 * The session driver returned will be the driver specified in the session configuration
	 * file. Only one session driver may be active for a given request, so the driver will
	 * be managed as a singleton.
	 *
	 * @return Session\Driver
	 */
	public static function driver()
	{
		if (is_null(static::$driver))
		{
			$driver = Config::get('session.driver');

			if (in_array($driver, array('cookie', 'file', 'database', 'memcached')))
			{
				return static::$driver = IoC::container()->resolve('laravel.session.'.$driver);
			}

			throw new \Exception("Session driver [$driver] is not supported.");
		}

		return static::$driver;
	}

	/**
	 * Pass all other methods to the default session driver.
	 *
	 * By dynamically passing these method calls to the default driver, the developer is
	 * able to use with a convenient API when working with the session.
	 *
	 * <code>
	 *		// Get an item from the default session driver
	 *		$name = Session::get('name');
	 *
	 *		// Equivalent call using the driver method
	 *		$name = Session::driver()->get('name');
	 * </code>
	 */
	public static function __callStatic($method, $parameters)
	{
		return call_user_func_array(array(static::driver(), $method), $parameters);
	}

}