import click
import json
import requests

# From library/zammad.py
setting_secrets = [
	'check_mk_token',
	'monitoring_token',
	'cti_token',
	'placetel_token',
	'sipgate_token',
	'import_freshdesk_endpoint_key',
	'import_otrs_endpoint_key',
	'import_zendesk_endpoint_key',
	'import_kayako_endpoint_password',
	'import_otrs_password',
	'es_password',
	'proxy_password',
]

@click.command(help='List available settings for zammad')
@click.option('--api-url', required=True)
@click.option('--api-token', required=True) # Use environment variable ZAMMAD_API_TOKEN!
@click.option('--ipv4', '-4', is_flag=True, help='Force IPv4')
def main(api_url, api_token, ipv4):
	if ipv4:
		requests.packages.urllib3.util.connection.HAS_IPV6 = False
	session = requests.Session()
	session.headers['Authorization'] = 'Token token=' + api_token
	resp = session.get(f'{api_url}/api/v1/settings')
	resp.raise_for_status()
	settings_by_area = {}
	for setting in resp.json():
		settings_by_area.setdefault(setting['area'], []).append(setting)
	for area, settings in sorted(settings_by_area.items(), key=lambda item: item[0]):
		print(f'# === {area} ===')
		for setting in sorted(settings, key=lambda setting: setting['name']):
			name = setting['name']
			default = json.dumps(setting["state_initial"]["value"])
			if name in setting_secrets:
				default = '<hidden>' if default else '<empty>'
			elif name == 'system_id':
				default = '<randomly chosen>'
			description = setting['description'].replace('\n', '\n# ')
			if not description or description == '-':
				description = setting['title']
			print(f'# {description}')
			print(f'{name}: {default}')
		print()

if __name__ == '__main__':
	main(auto_envvar_prefix='ZAMMAD')