<?php
if (!class_exists('nggImage'))
{
    /**
     * This is a wrapper class to the C_Image_Wrapper which provides all of the necessary logic for
     * retrieving attributes as needed.
     *
     * NOTE: it isn't possible yet (as of PHP 5.4) to use overloaded properties in any language constructs other than
     * isset(). To work around this with the wrapper class (which uses overloaded properties) we make a copy of any
     * attributes set to this object.
     */
    class nggImage extends Ngg_Serializable
    {
        public $_ngiw;
        public $_propogate = TRUE;


        // TODO: Make nggImage a subclass of C_Component and use the wrapper functionality
        function __construct($image)
        {
            $image->meta_data = $this->unserialize($image->meta_data);
            C_Component_Registry::get_instance();
            $this->_ngiw = new C_Image_Wrapper($image, NULL, TRUE);
        }

        public function __set($name, $value)
        {
            $this->$name = $value;
            if ($this->_propogate)
                $this->_ngiw->__set($name, $value);
        }

        public function __isset($name)
        {
            return $this->_ngiw->__isset($name);
        }

        public function __unset($name)
        {
            return $this->_ngiw->__unset($name);
        }

        public function __get($name)
        {
            $this->_propogate = FALSE;
            $this->$name = $this->_ngiw->__get($name);
            $this->_propogate = TRUE;
            return $this->$name;
        }

        function get_thumbcode($galleryname = '')
        {
            return $this->_ngiw->get_thumbcode($galleryname);
        }

        function get_href_link()
        {
            return $this->_ngiw->get_href_link();
        }

        function get_href_thumb_link()
        {
            return $this->_ngiw->get_href_thumb_link();
        }

        function cached_singlepic_file($width = '', $height = '', $mode = '' )
        {
            return $this->_ngiw->cached_singlepic_file($width, $height, $mode);
        }

        function get_tags()
        {
            return $this->_ngiw->get_tags();
        }

        function get_permalink()
        {
            return $this->_ngiw->get_permalink();
        }

    }

}
