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

import argparse
import os
import sys
import tempfile

from util import build_utils

sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))

import zip_helpers


def _RenameJars(options):
    with tempfile.NamedTemporaryFile(suffix='.jar') as temp:
        cmd = build_utils.JavaCmd() + [
            '-cp',
            options.r8_path,
            'com.android.tools.r8.relocator.RelocatorCommandLine',
            '--input',
            options.input_jar,
            '--output',
            temp.name,
        ]
        for mapping_rule in options.mapping_rules:
            cmd += ['--map', mapping_rule]

        build_utils.CheckOutput(cmd)
        # Use zip_helper.merge_zips to hermetize the zip because R8 changes the
        # permissions inside the output jar for some reason.
        zip_helpers.merge_zips(options.output_jar, [temp.name], compress=False)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--output-jar',
        required=True,
        help='Output file for the renamed classes jar',
    )
    parser.add_argument(
        '--input-jar', required=True, help='Input jar file to rename classes in'
    )
    parser.add_argument('--r8-path', required=True, help='Path to R8 Jar')
    parser.add_argument(
        '--map',
        action='append',
        dest='mapping_rules',
        help='List of mapping rules in the form of '
        + '"<original prefix>.**-><new prefix>"',
    )
    options = parser.parse_args()

    _RenameJars(options)


if __name__ == '__main__':
    main()
