#!/usr/bin/env python3

import os

from mmgen.cfg import Config
from mmgen.util import msg

opts_data = {
	'sets': [('print_checksum', True, 'quiet', True)],
	'text': {
		'desc': 'Opts test',
		'usage':'[args] [opts]',
		'options': """
-h, --help            Print this help message
--, --longhelp        Print help message for long (global) options
-i, --in-fmt=      f  Input is from wallet format 'f'
-d, --outdir=      d  Use outdir 'd'
-C, --print-checksum  Print a checksum
-E, --fee-estimate-mode=M Specify the network fee estimate mode.
-F, --no-foobleize    Do not foobleize the output, even on user request
-H, --hidden-incog-input-params=f,o  Read hidden incognito data from file
                      'f' at offset 'o' (comma-separated)
-k, --keep-label      Reuse label of input wallet for output wallet
-l, --seed-len=    l  Specify wallet seed length of 'l' bits.
-L, --label=       l  Specify a label 'l' for output wallet
-m, --minconf=     n  Minimum number of confirmations required to spend
                      outputs (default: 1)
-o, --show-opts=   L  List of cfg opts to display
-p, --hash-preset= p  Use the scrypt hash parameters defined by preset 'p'
-P, --passwd-file= f  Get wallet passphrase from file 'f'
-q, --quiet           Be quieter
-t, --min-temp=    t  Minimum temperature (in degrees Celsius)
-T, --max-temp=    t  Maximum temperature (in degrees Celsius)
-x, --point=       P  Point in Euclidean space
-X, --cached-balances Use cached balances (Ethereum only)
-v, --verbose         Be more verbose
                      sample help_note: {kgs}
                      sample help_note: {coin_id}
""",
	'notes': """

                           NOTES FOR THIS COMMAND

sample note: {nn}
"""
	},
	'code': {
		'options': lambda cfg, help_notes, s: s.format(
			kgs     = help_notes('keygen_backends'),
			coin_id = help_notes('coin_id'),
		),
		'notes': lambda s: s.format(nn='a note'),
	}
}

cfg = Config(opts_data=opts_data, need_proto=os.getenv('TEST_MISC_OPTS_NEEDS_PROTO'))

if cfg.show_opts:
	opts = cfg.show_opts.split(',')
	col1_w = max(len(s) for s in opts) + 5
	for opt in opts:
		msg('{:{w}} {}'.format(f'cfg.{opt}:', getattr(cfg, opt), w=col1_w))
		if cfg._proto:
			coin, *rem = opt.split('_')
			network = rem[0] if rem[0] in cfg._proto.network_names else None
			opt_name = '_'.join(rem[bool(network):])
			msg('{:{w}} {}'.format(f'proto.{opt_name}:', getattr(cfg._proto, opt_name), w=col1_w))

msg('')
for n, arg in enumerate(cfg._args, 1):
	msg(f'arg{n}: {arg}')