"""
Youtube Tag
---------
This implements a Liquid-style youtube tag for Pelican,
based on the jekyll / octopress youtube tag [1]_

Syntax
------
{% youtube id [width height] %}

Example
-------
{% youtube dQw4w9WgXcQ 640 480 %}

Output
------

<span class="videobox">
    <iframe
        width="640" height="480" src="https://www.youtube.com/embed/dQw4w9WgXcQ"
        frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen>
    </iframe>
</span>

[1] https://gist.github.com/jamieowen/2063748
"""
import re
from .mdx_liquid_tags import LiquidTags

SYNTAX = "{% youtube id [width height] %}"

YOUTUBE = re.compile(r'([\S]+)(\s+([\d%]+)\s([\d%]+))?')


@LiquidTags.register('youtube')
def youtube(preprocessor, tag, markup):
    width = 640
    height = 390
    youtube_id = None

    match = YOUTUBE.search(markup)
    if match:
        groups = match.groups()
        youtube_id = groups[0]
        width = groups[2] or width
        height = groups[3] or height

    if youtube_id:
        youtube_out = """
            <span class="videobox">
                <iframe width="{width}" height="{height}"
                    src='https://www.youtube.com/embed/{youtube_id}'
                    frameborder='0' webkitAllowFullScreen mozallowfullscreen
                    allowFullScreen>
                </iframe>
            </span>
        """.format(width=width, height=height, youtube_id=youtube_id).strip()
    else:
        raise ValueError("Error processing input, "
                         "expected syntax: {0}".format(SYNTAX))

    return youtube_out


# ---------------------------------------------------
# This import allows image tag to be a Pelican plugin
from liquid_tags import register  # noqa
