import config
import json
import requests

OK_CODE = 200

ORM_CLIENT_KWARGS = {'type': str, 'help': 'client name', 'default': None,
                     'nargs': '?'}


class MissingArgumentError(Exception):
    """Should be raised when an argument was found missing by CLI logic."""
    pass


def get_keystone_ep(rms_url, region_name):
    """Get the Keystone EP from RMS.

    :param rms_url: RMS server URL
    :param region_name: The region name
    :return: Keystone EP (string), None if it was not found
    """
    try:
        response = requests.get('%s/v2/orm/regions?regionname=%s' % (
            rms_url, region_name, ), verify=config.verify)
    except requests.exceptions.ConnectionError as e:
        print('Could not connect to RMS, URL: {}'.format(rms_url))
        return None

    if response.status_code != OK_CODE:
        print('RMS returned status: {}, content: {}'.format(
            response.status_code, response.content))
        return None

    # RMS returned 200
    lcp = response.json()
    try:
        for endpoint in lcp['regions'][0]['endpoints']:
            if endpoint['type'] == 'identity':
                return endpoint['publicURL']
    except KeyError:
        print('Response from RMS came in an unsupported format. '
              'Make sure that you are using RMS 3.5')
        return None

    # Keystone EP not found in the response
    print('No identity endpoint was found in the response from RMS')
    return None


def pretty_print_json(json_to_print):
    """Print a json without the u' prefix."""
    print(json.dumps(json_to_print))