// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// All of the types that follow are simple mappings of the types defined by the
// "Google Maps JavaScript API v3" defined here:
// https://developers.google.com/maps/documentation/javascript/geocoding

[DartPackage="mojo_services"]
module mojo;

import "location/interfaces/location.mojom";

struct LocationType {
  const string ROOFTOP = "ROOFTOP";
  const string RANGE_INTERPOLATED = "RANGE_INTERPOLATED";
  const string GEOMETRIC_CENTER = "GEOMETRIC_CENTER";
  const string APPROXIMATE = "APPROXIMATE";
};

struct Bounds {
  Location northeast;
  Location southwest;
};

struct ComponentRestrictions {
  string? administrative_area;
  string? country;
  string? locality;
  string? postal_code;
  string? route;
};

struct Options {
  ComponentRestrictions? restrictions;
  Location? location;
  string? region;
};

struct Geometry {
  Location location;
  LocationType location_type;
  Bounds viewport;
  Bounds? bounds;
};

struct Result {
  bool partial_match;
  Geometry geometry;
  string formatted_address;
  array<string> types;
  // TBD address_components
};

struct Status {
  const string OK = "OK";
  const string ZERO_RESULTS = "ZERO_RESULTS";
  const string OVER_QUERY_LIMIT = "OVER_QUERY_LIMIT";
  const string REQUEST_DENIED = "REQUEST_DENIED";
  const string INVALID_REQUEST = "INVALID_REQUEST";
};

interface Geocoder {
  AddressToLocation(string address, Options? options) => (string status, array<Result>? results);
  LocationToAddress(Location location, Options? options) => (string status, array<Result>? results);
};
