#!/usr/bin/env python3
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# 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__)
    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'])

    libdot.pack(tar, ['node_modules'], exclude=[
        'node_modules/.hash',
        'node_modules/.node/*',
        'node_modules/.bin/node',
        'node_modules/.bin/npm',
        '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 *=/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:]))
