# -*- coding: utf8 -*-
import functools
from os import path
from jinja2 import Markup


def _import_svg_icon(svg_filename=None):
    '''Reads the svg file and returns the contents'''

    assert svg_filename is not None, 'svg_filename cannot be equal to None'
    with open(svg_filename) as f:
        return f.read()


def returns_markup(func):
    '''Decorator for functions which should be marked as returning markup (i.e.
       a string which should not be escaped in the template).'''
    # ***
    # NOTE: Returns 'safe' markup, ie, non-escaped!
    # ***
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if result is not None:
            result = Markup(result)
        return result
    return wrapper


@returns_markup
def import_svg_icon(svg_filename, svg_classes=None):
    filename_format = {
        'base': path.dirname(path.realpath(__file__)),
        'filename': svg_filename,
        'relative': '../static'
    }
    svg_string = _import_svg_icon("{base}/{relative}/{filename}".format(
        **filename_format))

    if svg_classes:
        # TODO: log error but silent shhhhh
        assert svg_string[:4] == '<svg'
        svg_string = '<svg class="{classes}"{svg}'.format(
            classes=svg_classes,
            # We use 4 as <svg is 4 characters :)
            svg=svg_string[4:]
        )

    return svg_string

FILTERS = {
    'import_svg_icon': import_svg_icon
}