<?php

/**
 * Redux Framework Instance Container Class
 *
 * Automatically captures and stores all instances
 * of ReduxFramework at instantiation. 
 * 
 * @package     Redux_Framework
 * @subpackage  Core
 */
class ReduxFrameworkInstances
{
	/**
	 * ReduxFrameworkInstances
	 * @var object
	 */
	private static $instance;
	/**
	 * ReduxFramework instances
	 * @var array
	 */
	private static $instances;

	/**
	 * Get Instance
	 * 
	 * Get ReduxFrameworkInstances instance
	 * OR an instance of ReduxFramework by [opt_name]
	 * 
	 * @param  string	$opt_name	the defined opt_name
	 * @return object				class instance
	 */
	public static function get_instance( $opt_name = false ) {

		if ( is_null( self::$instance ) )
			self::$instance = new self();

		if ( $opt_name && !empty( self::$instances[ $opt_name ] ) ) {
			return self::$instances[ $opt_name ];
		}

		return self::$instance;
	}

	/**
	 * Get all instantiated ReduxFramework instances (so far)
	 * @return [type] [description]
	 */
	public static function get_all_instances() {
		return self::$instances;
	}

	private function __construct() {
		add_action( 'redux/construct', array( $this, 'capture' ), 5, 1 );
	} 

	function capture( $ReduxFramework ) {
		$this->store( $ReduxFramework );
	}

	private function store( $ReduxFramework ) {

		if ( $ReduxFramework instanceof ReduxFramework ) {
			$key = $ReduxFramework->args['opt_name'];
			self::$instances[ $key ] = $ReduxFramework;
		}
	}
}