<?php
namespace MyApp;

/**
 * MyAppConfiguration class provides a convenient holder for MyApp configs.
 * Note that these configurations are set in the app/config/config_PLATFORM.yml
 * files.
 *
 * @package MyApp
 * @author Sjan Evardsson <sjan@hasoffers.com>
 */

class MyAppConfiguration
{
    
/**
     * static instance
     * @var MyAppConfiguration
     */
    
protected static $_instance;
    
    
/**
     * bucket to hold key=>value pairs
     * @var array
     */
    
protected $_params;
    
    
/**
     * bucket to hold key=>value pairs where value is a key=>value pairs array
     * @var array
     */
    
protected $_arrayParams;
    
    
/**
     * Constructor blocked for public use
     */
    
protected function __construct() {
    }
    
    
/**
     * Get the instance
     */
    
static public function getInstance() {
        if (
is_null(self::$_instance)) {
            
self::$_instance = new self();
        }
        return 
self::$_instance;
    }
    
    
/**
     * Add params - if any of these params already exist their value will be
     * overwritten
     * @param array key=>value pairs, note that value may also be a key=>value
     * array
     * @return void
     */
    
public function addParams($parameters) {
        if (!
is_array($parameters)) throw new \Exception('MyAppConfiguration::addParams expects a value of type array');
        if (!
is_array($this->_params)) $this->_params = array();
        if (!
is_array($this->_arrayParams)) $this->_arrayParams = array();
        foreach (
$parameters as $key => $value) {
            if (
is_array($value)) $this->_arrayParams[$key] = $value;
            else 
$this->_params[$key] = $value;
        }
    }
    
    
/**
     * Getter
     * @param string key
     * @return mixed
     */
    
public function getParam($key) {
        
$retval null;
        if (
strpos($key'.') === false) {
            if (isset(
$this->_params[$key])) $retval $this->_params[$key];
            else if (isset(
$this->_arrayParams[$key])) $retval $this->_arrayParams[$key];
        } else {
            
$keyParts explode('.'$key);
            
// loop through parts homing in on actual requested value
            
$retval $this->_arrayParams;
            foreach (
$keyParts as $part) {
                if (isset(
$retval[$part])) $retval $retval[$part];
                else {
                    
$retval null;
                    break;
                }
            }
        }
        return 
$retval;
    }
}