import json


def decode_metric(encoded_metric_name):
    """
    Decode the metric name as encoded by encode_metric_name
    Params:
        encoded_metric_name: a string encoded in a format as returned by encode_metric_name()
            example: 'metricName {"metricTagKey1":"metricValue1","metricTagKey2":"metricValue2"}'
    Returns:
        The metric name and the dictionary of tags
    """
    if encoded_metric_name is None or encoded_metric_name == "":
        raise ValueError("Invalid value for encoded_metric_name")

    metric_tags = {}
    metric_name = encoded_metric_name.strip()
    brace_index = encoded_metric_name.find('{')
    if brace_index > -1:
        try:
            metric_tags = json.loads(encoded_metric_name[brace_index:])
            metric_name = encoded_metric_name[:brace_index].strip()
        except Exception as err:
            raise ValueError("Failed to parse the encoded_metric_name %s, invalid format"
                             % encoded_metric_name, err)
    return metric_name, metric_tags