<?php
/**
 * UI controls manager class
 */

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
	die;
}

if ( ! class_exists( 'CX_Controls_Manager' ) ) {

	/**
	 * Define CX_Controls_Manager class
	 */
	class CX_Controls_Manager {

		/**
		 * Path to controls folder for current Inteface Builder instance
		 *
		 * @var string
		 */
		private $base_path = '';

		/**
		 * Path to controls folder for current Inteface Builder instance
		 *
		 * @var string
		 */
		private $base_url = '';

		/**
		 * Constructor for the class
		 */
		public function __construct( $base_path = null, $base_url = null ) {

			$this->base_path = trailingslashit( $base_path );
			$this->base_url  = trailingslashit( $base_url );

			require $this->base_path . 'inc/class-cx-controls-base.php';
			$this->load_controls();
		}

		/**
		 * Automatically load found conrols
		 *
		 * @return void
		 */
		public function load_controls() {
			foreach ( glob( $this->base_path . 'inc/controls/*.php' ) as $file ) {
				require $file;
			}
		}

		/**
		 * Register new control instance
		 *
		 * @return object
		 */
		public function register_control( $type = 'text', $args = array() ) {

			$prefix    = 'CX_Control_';
			$classname = $prefix . str_replace( ' ', '_', ucwords( str_replace( '-', ' ', $type ) ) );

			if ( ! class_exists( $classname ) ) {
				return false;
			}

			$instance = new $classname( $args );

			$instance->set_base_url( $this->base_url );
			$instance->set_base_path( $this->base_path );

			return $instance;
		}

	}

}
