#!/usr/bin/env python3
#
# Copyright 2023 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

REPOSITORY_ROOT = os.path.abspath(
    os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir))

sys.path.insert(0, REPOSITORY_ROOT)
import build.android.gyp.util.build_utils as build_utils  # pylint: disable=wrong-import-position
import components.cronet.tools.utils as cronet_utils  # pylint: disable=wrong-import-position

# Set this environment variable in order to regenerate the golden text
# files.
_REBASELINE_PROGUARD = os.environ.get('REBASELINE_PROGUARD', '0') != '0'


def CompareGeneratedWithGolden(generated_file_path, golden_file_path):
    golden_text = cronet_utils.read_file(golden_file_path)
    generated_text = cronet_utils.read_file(generated_file_path)
    if _REBASELINE_PROGUARD:
        if golden_text != generated_text:
            print('Updated', golden_file_path)
            with open(golden_file_path, 'w') as f:
                f.write(generated_text)
        return None

    if golden_text is None:
        print(f'Golden file does not exist: {golden_file_path}')

    return cronet_utils.compare_text_and_generate_diff(generated_text,
                                                       golden_text,
                                                       golden_file_path)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--input_generated_file',
                        type=str,
                        help="Path to the generated file.")
    parser.add_argument('--input_golden_file',
                        type=str,
                        help='Path to the input golden file.')
    parser.add_argument('--target_name',
                        help='Target name that generates the golden file.')
    parser.add_argument('--stamp', type=str, help='Path to touch on success')
    args = parser.parse_args()
    text_diff = CompareGeneratedWithGolden(args.input_generated_file,
                                           args.input_golden_file)
    if text_diff:

        print(f"""
Cronet Proguard golden test failed. To generate it:
#######################################################
#                                                     #
#      Run the command below to generate the file     #
#                                                     #
#######################################################

########### START ###########
patch -p1 <<'END_DIFF'
{text_diff}
END_DIFF
############ END ############

If you wish to build the action locally in generation mode, See the instructions below:
#####################################################################
#                                                                   #
# Run the command below to re-run the action in generation mode     #
#                                                                   #
#####################################################################
./components/cronet/tools/cr_cronet.py -d out/proguard_config gn && \
REBASELINE_PROGUARD=1 autoninja -C out/proguard_config \
{args.target_name}

This will generate a GN output directory with the appropriate GN\
flags to run the golden_test in generation mode rather than verification mode.
""")
        sys.exit(-1)
    else:
        build_utils.Touch(args.stamp)


if __name__ == '__main__':
    sys.exit(main())
