from flask_assets import Bundle, Environment, Filter


class ConcatFilter(Filter):
    """
    Filter that merges files, placing a semicolon between them.

    Fixes issues caused by missing semicolons at end of JS assets, for example
    with last statement of jquery.pjax.js.
    """
    def concat(self, out, hunks, **kw):
        out.write(';'.join([h.data() for h, info in hunks]))


css_login = Bundle('node_modules/bootstrap/dist/css/bootstrap.css',
                   'node_modules/font-awesome/css/font-awesome.css',
                   'node_modules/ionicons/dist/css/ionicons.css',
                   'node_modules/icheck/skins/square/blue.css',
                   'node_modules/admin-lte/dist/css/AdminLTE.css',
                   filters=('cssmin', 'cssrewrite'),
                   output='generated/login.css')

js_login = Bundle('node_modules/jquery/dist/jquery.js',
                  'node_modules/bootstrap/dist/js/bootstrap.js',
                  'node_modules/icheck/icheck.js',
                  'custom/js/custom.js',
                  filters=(ConcatFilter, 'jsmin'),
                  output='generated/login.js')

js_validation = Bundle('node_modules/bootstrap-validator/dist/validator.js',
                       output='generated/validation.js')

css_main = Bundle(
    'node_modules/bootstrap/dist/css/bootstrap.css',
    'node_modules/font-awesome/css/font-awesome.css',
    'node_modules/ionicons/dist/css/ionicons.css',
    'node_modules/datatables.net-bs/css/dataTables.bootstrap.css',
    'node_modules/icheck/skins/square/blue.css',
    'node_modules/multiselect/css/multi-select.css',
    'node_modules/admin-lte/dist/css/AdminLTE.css',
    'node_modules/admin-lte/dist/css/skins/_all-skins.css',
    'custom/css/custom.css',
    'node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.css',
    filters=('cssmin', 'cssrewrite'),
    output='generated/main.css')

js_main = Bundle('node_modules/jquery/dist/jquery.js',
                 'node_modules/jquery-ui-dist/jquery-ui.js',
                 'node_modules/bootstrap/dist/js/bootstrap.js',
                 'node_modules/datatables.net/js/jquery.dataTables.js',
                 'node_modules/datatables.net-bs/js/dataTables.bootstrap.js',
                 'node_modules/jquery-sparkline/jquery.sparkline.js',
                 'node_modules/jquery-slimscroll/jquery.slimscroll.js',
                 'node_modules/icheck/icheck.js',
                 'node_modules/fastclick/lib/fastclick.js',
                 'node_modules/moment/moment.js',
                 'node_modules/admin-lte/dist/js/adminlte.js',
                 'node_modules/multiselect/js/jquery.multi-select.js',
                 'node_modules/datatables.net-plugins/sorting/natural.js',
                 'node_modules/jtimeout/src/jTimeout.js',
                 'node_modules/jquery.quicksearch/src/jquery.quicksearch.js',
                 'custom/js/custom.js',
                 'node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js',
                 filters=(ConcatFilter, 'jsmin'),
                 output='generated/main.js')

assets = Environment()
assets.register('js_login', js_login)
assets.register('js_validation', js_validation)
assets.register('css_login', css_login)
assets.register('js_main', js_main)
assets.register('css_main', css_main)
