load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_binary", "closure_js_library")
load("//tools/bzl:genrule2.bzl", "genrule2")
load(
    "//tools/bzl:js.bzl",
    "vulcanize",
)

def polygerrit_bundle(name, srcs, outs, app):
    appName = app.split(".html")[0].split("/").pop()  # eg: gr-app

    closure_js_binary(
        name = name + "_closure_bin",
        # Known issue: Closure compilation not compatible with Polymer behaviors.
        # See: https://github.com/google/closure-compiler/issues/2042
        compilation_level = "WHITESPACE_ONLY",
        defs = [
            "--polymer_pass",
            "--jscomp_off=duplicate",
            "--force_inject_library=es6_runtime",
        ],
        language = "ECMASCRIPT5",
        deps = [name + "_closure_lib"],
    )

    closure_js_library(
        name = name + "_closure_lib",
        srcs = [appName + ".js"],
        convention = "GOOGLE",
        # TODO(davido): Clean up these issues: http://paste.openstack.org/show/608548
        # and remove this supression
        suppress = [
            "JSC_JSDOC_MISSING_TYPE_WARNING",
            "JSC_UNNECESSARY_ESCAPE",
            "JSC_UNUSED_LOCAL_ASSIGNMENT",
        ],
        deps = [
            "//lib/polymer_externs:polymer_closure",
            "@io_bazel_rules_closure//closure/library",
        ],
    )

    vulcanize(
        name = appName,
        srcs = srcs,
        app = app,
        deps = ["//polygerrit-ui:polygerrit_components.bower_components"],
    )

    native.filegroup(
        name = name + "_app_sources",
        srcs = [
            name + "_closure_bin.js",
            appName + ".html",
        ],
    )

    native.filegroup(
        name = name + "_css_sources",
        srcs = native.glob(["styles/**/*.css"]),
    )

    native.filegroup(
        name = name + "_top_sources",
        srcs = [
            "favicon.ico",
            "index.html",
        ],
    )

    genrule2(
        name = name,
        srcs = [
            name + "_app_sources",
            name + "_css_sources",
            name + "_top_sources",
            "//lib/fonts:robotofonts",
            "//lib/js:highlightjs_files",
            # we extract from the zip, but depend on the component for license checking.
            "@webcomponentsjs//:zipfile",
            "//lib/js:webcomponentsjs",
        ],
        outs = outs,
        cmd = " && ".join([
            "mkdir -p $$TMP/polygerrit_ui/{styles,fonts,bower_components/{highlightjs,webcomponentsjs},elements}",
            "for f in $(locations " + name + "_app_sources); do ext=$${f##*.}; cp -p $$f $$TMP/polygerrit_ui/elements/" + appName + ".$$ext; done",
            "cp $(locations //lib/fonts:robotofonts) $$TMP/polygerrit_ui/fonts/",
            "for f in $(locations " + name + "_top_sources); do cp $$f $$TMP/polygerrit_ui/; done",
            "for f in $(locations " + name + "_css_sources); do cp $$f $$TMP/polygerrit_ui/styles; done",
            "for f in $(locations //lib/js:highlightjs_files); do cp $$f $$TMP/polygerrit_ui/bower_components/highlightjs/ ; done",
            "unzip -qd $$TMP/polygerrit_ui/bower_components $(location @webcomponentsjs//:zipfile) webcomponentsjs/webcomponents-lite.js",
            "cd $$TMP",
            "find . -exec touch -t 198001010000 '{}' ';'",
            "zip -qr $$ROOT/$@ *",
        ]),
    )
