#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os
from django import template
from django.conf import settings

register = template.Library()

class SassNode(template.Node):
    def __init__(self, format_string):
        self.format_string = format_string
        self.input = os.path.join(settings.SITE_ROOT, 'sass')
        self.output = os.path.join(settings.SITE_ROOT, 'static')
        self.input_file = None
        self.output_file = None
        self.__create_sass()
        self.__create_css()

    def __clean(self):
        """
        清理,如果没有相应的sass,则清理掉css
        本功能有些极端,暂时不提倡,提倡用手工清理没用的css
        """
        pass

    def __create_sass(self):
        path_list = self.format_string.split('.')
        input_path = os.path.join(self.input, *path_list[:-1])
        if not os.path.isdir(input_path):
            os.makedirs(input_path)
        input_file = os.path.join(input_path, '%s.sass'%path_list[-1])
        if not os.path.isfile(input_file):
            os.mknod(input_file)
        self.input_file = input_file

    def __create_css(self):
        path_list = self.format_string.split('.')
        output_path = os.path.join(self.output, *path_list[:-1])
        if not os.path.isdir(output_path):
            os.makedirs(output_path)
        output_file = os.path.join(output_path, '%s.css'%path_list[-1])
        if not os.path.isfile(output_file) or os.path.getmtime(self.input_file)>os.path.getmtime(output_file):
            error = os.system("/usr/local/ruby/bin/sass --no-cache --style expanded %s %s" % (self.input_file, output_file))
            if error:
                os.remove(output_file)
                raise template.TemplateSyntaxError('Syntax Error: %s'%self.input_file.replace(settings.SITE_ROOT,'').lstrip('/'))

    def render(self, context):
        path_list = self.format_string.split('.')
        output_url = ['static']
        output_url.extend(path_list[:-1])
        output_url.append('%s.css'%path_list[-1])
        output_url = '/' + '/'.join(output_url)
        return '<link rel="stylesheet" type="text/css" href="%s" />' % output_url


@register.tag
def sass(parser, token):
    try:
        tag_name, resource = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError, '%s tag requires a single argument.' % token.contents.split()[0]
    if not (resource[0]==resource[-1] and resource[0] in ('"',"'")):
        raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
    return SassNode(resource[1:-1])