// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:convert';

import 'package:collection/collection.dart';
import 'package:http_parser/http_parser.dart';

/// The type of a callback that parses parameters from an HTTP response.
typedef Map<String, dynamic> GetParameters(MediaType contentType, String body);

/// Parses parameters from a response with a JSON body, as per the [OAuth2
/// spec][].
///
/// [OAuth2 spec]: https://tools.ietf.org/html/rfc6749#section-5.1
Map<String, dynamic> parseJsonParameters(MediaType contentType, String body) {
  // The spec requires a content-type of application/json, but some endpoints
  // (e.g. Dropbox) serve it as text/javascript instead.
  if (contentType == null ||
      (contentType.mimeType != "application/json" &&
          contentType.mimeType != "text/javascript")) {
    throw new FormatException(
        'Content-Type was "$contentType", expected "application/json"');
  }

  var untypedParameters = jsonDecode(body);
  if (untypedParameters is! Map) {
    throw new FormatException(
        'Parameters must be a map, was "$untypedParameters"');
  }

  return DelegatingMap.typed(untypedParameters);
}
