<?php

namespace SilverStripe\Forms\HtmlEditor;

use SilverStripe\View\Parsers\ShortcodeHandler;
use Embed\Adapters\Adapter;
use Embed\Embed;

/**
 * Provider for the [embed] shortcode tag used by the embedding service
 * in the HTML Editor field.
 * Provides the html needed for the frontend and the editor field itself.
 */
class EmbedShortcodeProvider implements ShortcodeHandler
{

	/**
	 * Gets the list of shortcodes provided by this handler
	 *
	 * @return mixed
	 */
	public static function get_shortcodes()
	{
		return array('embed');
	}

	/**
	 * Embed shortcode parser from Oembed. This is a temporary workaround.
	 * Oembed class has been replaced with the Embed external service.
	 *
	 * @param $arguments
	 * @param $content
	 * @param $parser
	 * @param $shortcode
	 * @param array $extra
	 *
	 * @return string
	 */
	public static function handle_shortcode($arguments, $content, $parser, $shortcode, $extra = array()) {
		$embed = Embed::create($content, $arguments);
		if($embed && $embed instanceof Adapter) {
			return self::embedForTemplate($embed);
		} else {
			return '<a href="' . $content . '">' . $content . '</a>';
		}
	}

	/**
	 * @param Adapter $embed
	 *
	 * @return string
	 */
	public static function embedForTemplate($embed)
	{
		switch ($embed->type) {
			case 'video':
			case 'rich':
				if ($embed->extraClass) {
					return "<div class='media $embed->extraClass'>$embed->code</div>";
				} else {
					return "<div class='media'>$embed->code</div>";
				}
				break;
			case 'link':
				return '<a class="' . $embed->extraClass . '" href="' . $embed->origin . '">' . $embed->title . '</a>';
				break;
			case 'photo':
				return "<img src='$embed->url' width='$embed->width' height='$embed->height' class='$embed->extraClass' />";
				break;
		}
		return null;
	}
}