"""
 Copyright 2018-present Open Networking Foundation

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
"""

"""
    Rules to build the ONOS GUI 2 FW Lib

    The GUI2 Angular 6 elements are built here with Angular CLI 'ng'
    Some work is being done in the Bazel community to integrate Bazel and
    Angular 6, (Angular Buildtools Convergence -
    https://docs.google.com/document/d/1OlyiUnoTirUj4gecGxJeZBcjHcFr36RvLsvpBl2mxA8/preview)
    but it is in the very early stages (Aug'18) and not yet fit
    for production and at present it works as a replacement for Angular CLI
    (which is not desirable).

    There are plans to extend Bazel it to work with Angular CLI, and if works
    well this Bazel file may be rearchiteced in future.

    Bazel and npm are incompatibe in how they deal with files. npm likes to
    follow links to get back to the original canonical path names, and bazel
    uses links extensively when populating the sandbox. To get around these
    problems, the rules that follow use filegroups to specify the files as
    dependencies and then use a genrule to convert the files into a tar ball.
    Once the tar ball is unrolled into the sandbox, the links are broken, but
    the build is still hermetic since those files are referred to as dependencies in the genrule.
"""

COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [
    "@javax_ws_rs_api//jar",
    "@servlet_api//jar",
    "@jetty_websocket//jar",
    "@jetty_util//jar",
    "@jersey_media_multipart//jar",
    "@jersey_server//jar",
    "//utils/rest:onlab-rest",
    "//core/store/serializers:onos-core-serializers",
]

TEST_DEPS = TEST + [
    "//core/api:onos-api-tests",
    "//drivers/default:onos-drivers-default",
]

"""
    Files that get put at the top level of the tar ball
"""

filegroup(
    name = "_root_level_files",
    srcs =
        [
            ":angular.json",
            ":package.json",
            ":package-lock.json",
            ":tsconfig.json",
            ":tslint.json",
        ],
)

filegroup(
    name = "_e2e_test_files",
    srcs = [
        ":e2e/protractor.conf.js",
        ":e2e/src/app.e2e-spec.ts",
        ":e2e/src/app.po.ts",
        ":e2e/tsconfig.e2e.json",
    ],
)

"""
    Make a group file of all the webapp files.
"""

filegroup(
    name = "_gui2_fw_lib_src",
    srcs = glob(
        [
            "projects/gui2-fw-lib/**",
        ],
        exclude = [
            "projects/gui2-fw-lib/**/*.spec.*",  # Don't track tests here
            "projects/gui2-fw-lib/karma.conf.js",
            "projects/gui2-fw-lib/src/test.ts",
        ],
    ),
)

"""
    Make a group of all the webapp qpp files.
"""

filegroup(
    name = "_gui2_app_files",
    srcs = glob(
        [
            "src/**/*",
        ],
    ),
)

"""
    Make a jar file of all the webapp test (*.spec.ts) files.
"""

genrule(
    name = "_gui2_fw_lib_tests",
    srcs = glob(
        [
            "projects/gui2-fw-lib/karma.conf.js",
            "projects/gui2-fw-lib/src/test.ts",
            "projects/gui2-fw-lib/tsconfig.spec.json",
            "projects/gui2-fw-lib/**/*.spec.ts",
        ],
        exclude = [
            "projects/gui2-fw-lib/ng-package.json",
            "projects/gui2-fw-lib/ng-package.prod.json",
            "projects/gui2-fw-lib/package.json",
            "projects/gui2-fw-lib/tsconfig.lib.json",
            "projects/gui2-fw-lib/tslint.json",
            "projects/gui2-fw-lib/src/public_api.ts",
        ],
    ),
    outs = ["gui2_fw_lib_tests.jar"],
    cmd = "cd web/gui2-fw-lib &&" +
          " jar Mcf ../../$@ .",
)

"""
    Make a jar file of all the CSS files we want to reuse in the target.
"""

genrule(
    name = "gui2_fw_lib_ext_css",
    srcs = glob(
        [
            "projects/gui2-fw-lib/src/lib/widget/panel.css",
            "projects/gui2-fw-lib/src/lib/widget/panel-theme.css",
            "projects/gui2-fw-lib/src/lib/widget/table.css",
            "projects/gui2-fw-lib/src/lib/widget/table.theme.css",
            "projects/gui2-fw-lib/src/lib/widget/table.theme.css",
            "projects/gui2-fw-lib/src/lib/layer/loading.service.css",
        ],
    ),
    outs = ["gui2_fw_lib_css.jar"],
    cmd = " ROOT=`pwd` &&" +
          " cd web/gui2-fw-lib/projects/gui2-fw-lib/src/lib &&" +
          " jar Mcf $$ROOT/$@ .",
    visibility = ["//visibility:public"],
)

"""
    Install npm packages listed in package.json in web/gui2
    See bazel-genfiles/web/gui2/onos-gui2-npm-install.log for details of the 'npm install'
"""

genrule(
    name = "onos-gui2-fw-npm-install",
    srcs = [
        "@nodejs//:bin/npm",
        "@nodejs//:bin/node",
        "@nodejs//:bin/node.js",
        "@nodejs//:bin/nodejs/bin/node",
        "@nodejs//:bin/nodejs/bin/npm",
        ":_root_level_files",
    ],
    outs = [
        "onos-gui2-npm-install.jar",
        "onos-gui2-npm-install.log",
    ],
    cmd = " ROOT=`pwd` &&" +
          " export HOME=. &&" +
          " export XDG_CONFIG_HOME=$(@D)/config &&" +  # npm config cache to the sandbox
          " export BABEL_DISABLE_CACHE=1 &&" +  # turn off babel cache
          ' if [[ ! -z $${HTTP_PROXY-} ]]; then NPM_ARGS="--proxy $$HTTP_PROXY --without-ssl --insecure"; else NPM_ARGS=""; fi &&' +
          " NPM=$(location @nodejs//:bin/npm) &&" +
          " export PATH=$$ROOT/$$(dirname $${NPM}):$$PATH &&" +
          " npm -v > $$ROOT/$(location onos-gui2-npm-install.log) 2>&1 &&" +
          " cd web/gui2-fw-lib && " +
          " npm $$NPM_ARGS install --no-cache >> $$ROOT/$(location onos-gui2-npm-install.log) 2>&1 &&" +
          " jar Mcf $$ROOT/$(location onos-gui2-npm-install.jar) node_modules &&" +
          " touch $$ROOT/$(location onos-gui2-npm-install.log)",  # to get the log always as the 2nd file
    message = "NodeJS npm install",
    visibility = ["//visibility:public"],
)

"""
    Run ng build to create outputs in production mode
    See bazel-genfiles/web/gui2/onos-gui2-ng-build-prod.log for details of the Angular CLI output
"""

genrule(
    name = "onos-gui2-fw-ng-build",
    srcs = [
        "@nodejs//:bin/npm",
        "@nodejs//:bin/node",
        "@nodejs//:bin/node.js",
        "@nodejs//:bin/nodejs/bin/node",
        "@nodejs//:bin/nodejs/bin/npm",
        ":onos-gui2-fw-npm-install",
        ":_root_level_files",
        ":_gui2_fw_lib_src",
    ],
    outs = [
        "gui2-fw-ng-build-prod.log",
        "gui2-fw-lib-ver.tgz",
    ],
    cmd = "ROOT=`pwd` &&" +
          " export HOME=. &&" +
          " export XDG_CONFIG_HOME=$(@D)/config &&" +
          " NODE=$(location @nodejs//:bin/node) &&" +
          " INSTALL_FILES=($(locations :onos-gui2-fw-npm-install)) &&" +  # An array of filenames - sorted by time created
          " cd web/gui2-fw-lib &&" +
          " jar xf $$ROOT/$${INSTALL_FILES[0]} &&" +
          " chmod +x $$ROOT/web/gui2-fw-lib/node_modules/@angular/cli/bin/ng &&" +
          " export PATH=$$ROOT/$$(dirname $${NODE}):$$ROOT/web/gui2-fw-lib/node_modules/@angular/cli/bin:$$PATH &&" +
          " node -v > ../../$(location gui2-fw-ng-build-prod.log) &&" +
          " npm -v >> ../../$(location gui2-fw-ng-build-prod.log) &&" +
          " ng -v >> ../../$(location gui2-fw-ng-build-prod.log);" +
          " ng build --prod gui2-fw-lib >> $$ROOT/$(location gui2-fw-ng-build-prod.log) 2>&1 ||" +
          " if [ $$? -eq 0 ]; then echo 'Successfully built GUI FW library';" +
          " else " +
          "   echo 'Error running \'ng build gui2-fw-lib\' on \'//web/gui2-fw-lib:onos-gui2-fw-ng-build\'. \\\n" +
          "   See bazel-genfiles/web/gui2-fw-lib/gui2-fw-ng-build-prod.log for more details' >&2;" +
          "   exit 1;" +
          " fi;" +
          " cd dist/gui2-fw-lib &&" +
          " npm pack &&" +
          " mv gui2-fw-lib-*.tgz $$ROOT/$(location gui2-fw-lib-ver.tgz) &&" +
          " touch $$ROOT/$(location gui2-fw-ng-build-prod.log)",  # to get the log always as the 2nd file
    message = "GUI FW Lib build",
    visibility = ["//visibility:public"],
)

"""
    Run 'ng test' to run Angular test and 'ng lint' for checkstyle
    See bazel-genfiles/web/gui2/onos-gui2-fw-ng-lint.log or
    bazel-genfiles/web/gui2/onos-gui2-fw-ng-test.log for details of the Angular CLI output
"""

genrule(
    name = "_onos-gui2-fw-ng-test",
    srcs = [
        "@nodejs//:bin/npm",
        "@nodejs//:bin/node",
        "@nodejs//:bin/node.js",
        "@nodejs//:bin/nodejs/bin/node",
        "@nodejs//:bin/nodejs/bin/npm",
        ":onos-gui2-fw-npm-install",
        ":_root_level_files",
        ":_gui2_fw_lib_src",
        ":_gui2_fw_lib_tests",
        ":_e2e_test_files",
    ],
    outs = [
        "onos-gui2-fw-ng-ver.log",
        "onos-gui2-fw-ng-lint.log",
        "onos-gui2-fw-ng-test.log",
    ],
    cmd = " ROOT=`pwd` &&" +
          " export HOME=. &&" +
          " export XDG_CONFIG_HOME=$(@D)/config &&" +
          " NODE=$(location @nodejs//:bin/node) &&" +
          " INSTALL_FILES=($(locations :onos-gui2-fw-npm-install)) &&" +  # An array of filenames - sorted by time created
          " mkdir -p web/gui2-fw-lib &&" +
          " cd web/gui2-fw-lib &&" +
          " jar xf ../../$(location :_gui2_fw_lib_tests) &&" +
          " jar xf $$ROOT/$${INSTALL_FILES[0]} &&" +
          " chmod +x $$ROOT/web/gui2-fw-lib/node_modules/@angular/cli/bin/ng &&" +
          " export PATH=$$ROOT/$$(dirname $${NODE}):$$ROOT/web/gui2-fw-lib/node_modules/@angular/cli/bin:$$PATH &&" +
          " node -v > ../../$(location onos-gui2-fw-ng-ver.log) &&" +
          " npm -v >> ../../$(location onos-gui2-fw-ng-ver.log) &&" +
          " ng -v >> ../../$(location onos-gui2-fw-ng-ver.log) &&" +
          " ng lint gui2-fw-lib > ../../$(location onos-gui2-fw-ng-lint.log);" +
          " if [ -f /usr/bin/chromium-browser ]; then " +  # Add to this for Mac and Chrome
          "   export CHROME_BIN=/usr/bin/chromium-browser; " +
          " elif [ -f /opt/google/chrome/chrome ]; then " +
          "   export CHROME_BIN=/opt/google/chrome/chrome; " +
          " else " +
          "   MSG='Warning: Step _onos-gui2-fw-ng-test skipped because \\n" +
          "   no binary for ChromeHeadless browser was found at /usr/bin/chromium-browser. \\n" +
          "   Install Google Chrome or Chromium Browser to allow this step to run.';" +
          "   echo -e $$MSG >&2;" +
          "   echo -e $$MSG > ../../$(location onos-gui2-fw-ng-test.log);" +
          "   exit 0;" +
          " fi;" +
          " ng test --preserve-symlinks --code-coverage --browsers=ChromeHeadless" +
          "     --watch=false gui2-fw-lib > ../../$(location onos-gui2-fw-ng-test.log) 2>&1 ||" +
          " if [ $$? -eq 0 ]; then echo 'Successfully ran tests';" +
          " else " +
          "   echo 'Error running \'ng test\' on \'//web/gui2-fw-lib:onos-gui2-fw-ng-test\'. \\\n" +
          "     See bazel-genfiles/web/gui2-fw-lib/onos-gui2-fw-ng-test.log for more details' >&2;" +
          #"   tail -n 100 ../../$(location onos-gui2-fw-ng-test.log) >&2;" +
          "   exit 1;" +
          " fi;",
    message = "GUI FW lib lint and test",
)

"""
    Wrap the genrule for testing in a test
"""

sh_test(
    name = "onos-gui2-ng-tests",
    size = "small",
    srcs = [
        ":ng-test.sh",
    ],
    data = [
        ":_onos-gui2-fw-ng-test",
    ],
    deps = [
        "@bazel_tools//tools/bash/runfiles",
    ],
)
