from django import template
from django.conf import settings

register = template.Library()

def get_version(version_attr):
  """
  Return the version number from the settings.py file or None if it is not set
  
  Example: (If settings.IMAGE_VERSION = 2)
  get_version('IMAGE_VERSION')
  
  Returns:
  2
  """
  try:
    version = getattr(settings, version_attr)
  except AttributeError:
    version = None

  return version

def version_url(url_string, version = None):
  """
  Returns a version url concatenated with the settings.MEDIA_URL
  
  Example: (If settings.MEDIA_URL = '/media/')
  
  version_url('js/jquery.js', 5)
  
  Returns:
  
  /media/js/5/jquery.js
  """
  parts = url_string.rpartition('/')
  
  if version:
    url_string = parts[0] + '/' + str(version) + '/' + parts[2]

  return settings.MEDIA_URL + url_string

@register.simple_tag
def image_url(url_string):
  """
  Returns a versioned url
  
  Example: (If settings.MEDIA_URL = '/media/' and settings.IMAGE_VERSION = 2
  {% load media_url %}
  {% image_url "images/favicon.ico" %}
  
  Returns:
  
  /media/images/2/favicon.ico
  """
  return version_url(url_string, get_version('IMAGE_VERSION'))

@register.simple_tag
def css_url(url_string):
  """
  Returns a versioned url
  
  Example: (If settings.MEDIA_URL = '/media/' and settings.CSS_VERSION = 2
  {% load media_url %}
  {% css_url "css/style.css" %}
  
  Returns:
  
  /media/css/2/style.css
  """
  return version_url(url_string, get_version('CSS_VERSION'))

@register.simple_tag
def js_url(url_string):
  """
  Returns a versioned url
  
  Example: (If settings.MEDIA_URL = '/media/' and settings.JS_VERSION = 2
  {% load media_url %}
  {% js_url "js/jquery.js" %}
  
  Returns:
  
  /media/js/2/jquery.js
  """
  return version_url(url_string, get_version('JS_VERSION'))