import subprocess

from django.conf import settings

from compress.filter_base import FilterBase, FilterError

BINARY = getattr(settings, 'COMPRESS_CLOSURE_BINARY', 'java -jar compiler.jar')
JS_ARGUMENTS = getattr(settings, 'COMPRESS_CLOSURE_JS_ARGUMENTS', '')

class GoogleClosureCompilerFilter(FilterBase):

    def filter_common(self, content, arguments):
        command = BINARY
        for argument in arguments:
            command += ' --' + argument + ' ' + arguments[argument]

        if self.verbose:
            command += ' --verbose'

        p = subprocess.Popen(command, shell = True, stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE)
        p.stdin.write(content)
        p.stdin.close()

        filtered_css = p.stdout.read()
        p.stdout.close()

        err = p.stderr.read()
        p.stderr.close()

        if p.wait() != 0:
            if not err:
                err = 'Unable to apply Google Closure Compiler filter'

            raise FilterError(err)

        if self.verbose:
            print err

        return filtered_css

    def filter_js(self, js):
        return self.filter_common(js, JS_ARGUMENTS)