<?php

/**
 * Content Handler
 * @package Simple Lightbox
 * @subpackage Content Handlers
 * @author Archetyped
 */
class SLB_Content_Handler extends SLB_Component {
	/* Properties */

	/**
	 * Match handler
	 * @var callback
	 */
	protected $match;

	/**
	 * Custom attributes
	 * @var callback
	 */
	protected $attributes;

	/* Matching */

	/**
	 * Set matching handler
	 * @param callback $callback Handler callback
	 * @return object Current instance
	 */
	public function set_match($callback) {
		$this->match = ( is_callable($callback) ) ? $callback : null;
		return $this;
	}

	/**
	 * Retrieve match handler
	 * @return callback|null Match handler
	 */
	protected function get_match() {
		return $this->match;
	}

	/**
	 * Check if valid match set
	 */
	protected function has_match()	{
		return ( is_null($this->match) ) ? false : true;
	}

	/**
	 * Match handler against URI
	 * @param string $uri URI to check for match
	 * @return bool TRUE if handler matches URI
	 */
	public function match($uri, $uri_raw = null) {
		$ret = false;
		if ( !!$uri && is_string($uri) && $this->has_match() ) {
			$ret = call_user_func($this->get_match(), $uri, $uri_raw);
		}
		return $ret;
	}

	/* Attributes */

	public function set_attributes($callback) {
		$this->attributes = ( is_callable($callback) ) ? $callback : null;
		return $this;
	}

	public function get_attributes() {
		$ret = array();
		// Callback
		if ( !is_null($this->attributes) ) {
			$ret = call_user_func($this->attributes);
		}
		// Filter
		$hook = sprintf('content_handler_%s_attributes', $this->get_id());
		$ret = $this->util->apply_filters($hook, $ret);
		return ( is_array($ret) ) ? $ret : array();
	}
}