#!/usr/bin/env python3
# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Update our node_modules bundle."""

import logging
import os
import sys

import libdot


def get_parser():
    """Get a command line parser."""
    parser = libdot.ArgumentParser(description=__doc__)
    parser.add_argument(
        "--skip-archive",
        dest="run_archive",
        action="store_false",
        default=True,
        help="Skip creating node_modules archive.",
    )
    return parser


def main(argv):
    """The main func!"""
    parser = get_parser()
    opts = parser.parse_args(argv)
    libdot.node_and_npm_setup()

    tar = libdot.LIBAPPS_DIR / "node_modules.tar.xz"
    os.chdir(libdot.LIBAPPS_DIR)

    libdot.unlink("package-lock.json")

    logging.info("Removing modules not listed in package.json")
    libdot.npm.run(["prune"])

    logging.info("Updating modules from package.json")
    libdot.npm.run(["upgrade", "--no-save"])

    if not opts.run_archive:
        logging.info("Skipping archive creation")
        return

    libdot.pack(
        tar,
        ["node_modules"],
        exclude=[
            "node_modules/.hash",
            "node_modules/.node/*",
            "node_modules/.bin/node",
            "node_modules/puppeteer/.local-chromium",
        ],
    )

    new_hash = libdot.sha256(tar)
    final_tar = f"node_modules-{new_hash}.tar.xz"
    tar.rename(final_tar)

    logging.info(
        "To update the hash, run:\n"
        'sed -i \'/^NODE_MODULES_HASH *=/,+1{/"/s:".*":"%s":}\' \'%s/node\'',
        new_hash,
        libdot.BIN_DIR,
    )
    logging.info(
        "To upload the new modules:\ngsutil cp -a public-read %s %s/",
        final_tar,
        libdot.node.NODE_MODULES_GS_URI,
    )


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
