#!/usr/bin/python


import os, os.path, shutil

YUI_COMPRESSOR = 'yuicompressor-2.4.2.jar'


def compress(in_files, out_file, in_type='js', verbose=False,
             temp_file='.temp'):
    temp = open(temp_file, 'w')
    for f in in_files:
        fh = open(f)
        data = fh.read() + '\n'
        fh.close()

        temp.write(data)

        print ' + %s' % f
    temp.close()

    options = ['-o "%s"' % out_file,
               '--type %s' % in_type]

    if verbose:
        options.append('-v')

    os.system('java -jar "%s" %s "%s"' % (YUI_COMPRESSOR,
                                          ' '.join(options),
                                          temp_file))

    org_size = os.path.getsize(temp_file)
    new_size = os.path.getsize(out_file)

    print '=> %s' % out_file
    print 'Original: %.2f kB' % (org_size / 1024.0)
    print 'Compressed: %.2f kB' % (new_size / 1024.0)
    print 'Reduction: %.1f%%' % (float(org_size - new_size) / org_size * 100)
    print ''

    #os.remove(temp_file)
    
    
SCRIPTS = [
           # jquery
           'js/jquery-2.1.0.min.js',
           # jquery mobile
           'js/jquery.mobile-1.4.3.min.js',
           # data tables
           'js/dataTables/js/jquery.dataTables.min.js',
           # js class
           'js/jquery.makeclass.js',
           # noty
           'js/noty/jquery.noty.js',
           'js/noty/layouts/top.js',
           'js/noty/themes/default.js',
           # utility
           'js/utility-jq.js',
           'js/purl.js',
           # canvas
           'js/kinetic-v5.1.0.min.js',
           # debounce 
           'js/jquery.ba-throttle-debounce.min.js',
           # rainbowvis
           'js/rainbowvis.js',
           # mustache
           'js/mustache.js',
           # moment
           'js/moment.js',
           
           # flot
           'js/flot/jquery.flot.min.js',
           'js/flot/jquery.flot.canvas.min.js',
           'js/flot/jquery.flot.navigate.min.js',
           'js/flot/jquery.flot.selection.min.js',
           'js/flot/jquery.flot.time.min.js',
           
           # Data Picker
           'js/datebox/jqm-datebox.core.min.js',
           'js/datebox/jqm-datebox.mode.calbox.min.js',
           'js/datebox/jqm-datebox.mode.datebox.min.js',
           
           # paytor
        'pjs/paytor.js',
        'pjs/paytor-view.js',
        'pjs/paytor-draw.js',

        'pjs/paytor-draw-label.js',
        'pjs/paytor-draw-labelbool.js',
        'pjs/paytor-draw-input.js',

        'pjs/paytor-draw-flipswitch.js',
        'pjs/paytor-draw-radiobool.js',
        'pjs/paytor-draw-button.js',
        
        'pjs/paytor-draw-connection.js',
        
        'pjs/paytor-alarm-active.js',
        'pjs/paytor-alarm-history.js',
        
        'pjs/paytor-trend-flot.js',

        'pjs_synopsis/paytor-view-synopsis.js',
        'pjs_synopsis/paytor-draw-synopsis_ita.js',
        
        'pjs_synopsis/paytor-draw-syn-led.js',
        'pjs_synopsis/paytor-draw-syn-label.js',
        'pjs_synopsis/paytor-draw-syn-labelbool.js',
        'pjs_synopsis/paytor-draw-syn-imagebool.js',
        'pjs_synopsis/paytor-draw-syn-level.js',
        
        'pjs_synopsis/paytor-draw-synopsis-info_ita.js',
        'pjs_synopsis/paytor-draw-synopsis-animation.js',
        
        #paytor conf
        'app/conf/paytor_conf.js',
        
        'app/conf/paytor_conf_index.js',
        'app/conf/paytor_conf_settings.js',
        
        'app/conf/paytor_conf_synopsis_bed.js',
        'app/conf/paytor_conf_synopsis_vacuum.js',
        'app/conf/paytor_conf_synopsis_mini.js',
        
        'app/conf/paytor_conf_trend_emi.js',
        'app/conf/paytor_conf_trend_vacuum.js',
        'app/conf/paytor_conf_trend_level.js',
        'app/conf/paytor_conf_trend_temperature.js',
        
        # init
        'app/conf/paytor_init_custom.js',
        
    ]

SCRIPTS_OUT_DEBUG = 'app/js/paytor3.js'
SCRIPTS_OUT = 'app/js/paytor3.min.js'

STYLESHEETS = [
    # jquery mobile
    'css/paytor-theme-library-1.4.3.min.css',
    'css/jquery.mobile.icons-1.4.3.min.css',
    'css/jquery.mobile.structure-1.4.3.min.css',
    # paytor
    'css/devel.css',
    'css/styles.css',
    # data table
    'js/dataTables/css/jquery.dataTables.css',
    # date box
    'js/datebox/jqm-datebox.min.css'
    ]

STYLESHEETS_OUT = 'app/media/paytor3.min.css'

def main():
    print 'Compressing JavaScript...'
    compress(SCRIPTS, SCRIPTS_OUT, 'js', False, SCRIPTS_OUT_DEBUG)

    print 'Compressing CSS...'
    compress(STYLESHEETS, STYLESHEETS_OUT, 'css')

if __name__ == '__main__':
    main()
    
    
