# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Calls a function defined in rpc_client.py, which will forward the request
to the test service.

This command assumes the updater test service is already installed on the
system.

Example usages:
    vpython3 service_proxy.py --function=RunAsSystem \
        --args='{"command": "notepad.exe"}'
    vpython3 service_proxy.py --function=AnswerUpcomingUACPrompt \
        --args='{"actions": "A", "wait_child": false, "source": "demo"}'
"""

import argparse
import logging
import json
import sys

import rpc_client


def ParseCommandLine():
    """Parse the command line arguments."""
    cmd_parser = argparse.ArgumentParser(
        description='Updater test service client'
    )

    cmd_parser.add_argument(
        '--function',
        dest='function',
        type=str,
        help='Name of the function to call, defined in rpc_client.py',
    )
    cmd_parser.add_argument(
        '--args',
        dest='args',
        type=json.loads,
        help='Arguments to the function, in json format.',
    )
    return cmd_parser.parse_args()


def main():
    flags = ParseCommandLine()

    if not flags.function:
        logging.error('Must specify a function to call.')
        sys.exit(-1)

    if not hasattr(rpc_client, flags.function):
        logging.error(
            'Function %s is not defined in module rpc_client.', flags.function
        )
    function = getattr(rpc_client, flags.function)
    result = function(**flags.args)
    logging.error('Function [%s] returned: %s', flags.function, result)
    sys.exit(0)


if __name__ == '__main__':
    main()
