# Copyright 2018 The Abseil Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Test helper for argparse_flags_test."""

import os
import random

from absl import app
from absl import flags
from absl.flags import argparse_flags

FLAGS = flags.FLAGS

flags.DEFINE_string('absl_echo', None, 'The echo message from absl.flags.')


def parse_flags_simple(argv):
  """Simple example for absl.flags + argparse."""
  parser = argparse_flags.ArgumentParser(
      description='A simple example of argparse_flags.')
  parser.add_argument(
      '--argparse_echo', help='The echo message from argparse_flags')
  return parser.parse_args(argv[1:])


def main_simple(args):
  print('--absl_echo is', FLAGS.absl_echo)
  print('--argparse_echo is', args.argparse_echo)


def roll_dice(args):
  print('Rolled a dice:', random.randint(1, args.num_faces))


def shuffle(args):
  inputs = list(args.inputs)
  random.shuffle(inputs)
  print('Shuffled:', ' '.join(inputs))


def parse_flags_subcommands(argv):
  """Subcommands example for absl.flags + argparse."""
  parser = argparse_flags.ArgumentParser(
      description='A subcommands example of argparse_flags.')
  parser.add_argument('--argparse_echo',
                      help='The echo message from argparse_flags')

  subparsers = parser.add_subparsers(help='The command to execute.')

  roll_dice_parser = subparsers.add_parser(
      'roll_dice', help='Roll a dice.')
  roll_dice_parser.add_argument('--num_faces', type=int, default=6)
  roll_dice_parser.set_defaults(command=roll_dice)

  shuffle_parser = subparsers.add_parser(
      'shuffle', help='Shuffle inputs.')
  shuffle_parser.add_argument(
      'inputs', metavar='I', nargs='+', help='Inputs to shuffle.')
  shuffle_parser.set_defaults(command=shuffle)

  return parser.parse_args(argv[1:])


def main_subcommands(args):
  main_simple(args)
  args.command(args)


if __name__ == '__main__':
  main_func_name = os.environ['MAIN_FUNC']
  flags_parser_func_name = os.environ['FLAGS_PARSER_FUNC']
  app.run(main=globals()[main_func_name],
          flags_parser=globals()[flags_parser_func_name])
