// Type definitions for Google Apps Script 2023-10-28
// Project: https://developers.google.com/apps-script/
// Definitions by: motemen <https://github.com/motemen/>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

/// <reference path="google-apps-script.types.d.ts" />
/// <reference path="google-apps-script.base.d.ts" />

declare namespace GoogleAppsScript {
  namespace Maps {
    /**
     * An enum representing the types of restrictions to avoid when finding directions.
     */
    enum Avoid { TOLLS, HIGHWAYS }
    /**
     * An enum representing the named colors available to use in map images.
     */
    enum Color { BLACK, BROWN, GREEN, PURPLE, YELLOW, BLUE, GRAY, ORANGE, RED, WHITE }
    /**
     * Allows for the retrieval of directions between locations.
     * The example below shows how you can use this class to get the directions from Times Square to
     * Central Park, stopping first at Lincoln Center, plot the locations and path on a map, and send
     * the map in an email.
     *
     *     // Get the directions.
     *     var directions = Maps.newDirectionFinder()
     *         .setOrigin('Times Square, New York, NY')
     *         .addWaypoint('Lincoln Center, New York, NY')
     *         .setDestination('Central Park, New York, NY')
     *         .setMode(Maps.DirectionFinder.Mode.DRIVING)
     *         .getDirections();
     *     var route = directions.routes[0];
     *
     *     // Set up marker styles.
     *     var markerSize = Maps.StaticMap.MarkerSize.MID;
     *     var markerColor = Maps.StaticMap.Color.GREEN
     *     var markerLetterCode = 'A'.charCodeAt();
     *
     *     // Add markers to the map.
     *     var map = Maps.newStaticMap();
     *     for (var i = 0; i < route.legs.length; i++) {
     *       var leg = route.legs[i];
     *       if (i == 0) {
     *         // Add a marker for the start location of the first leg only.
     *         map.setMarkerStyle(markerSize, markerColor, String.fromCharCode(markerLetterCode));
     *         map.addMarker(leg.start_location.lat, leg.start_location.lng);
     *         markerLetterCode++;
     *       }
     *       map.setMarkerStyle(markerSize, markerColor, String.fromCharCode(markerLetterCode));
     *       map.addMarker(leg.end_location.lat, leg.end_location.lng);
     *       markerLetterCode++;
     *     }
     *
     *     // Add a path for the entire route.
     *     map.addPath(route.overview_polyline.points);
     *
     *     // Send the map in an email.
     *     var toAddress = Session.getActiveUser().getEmail();
     *     MailApp.sendEmail(
     *       toAddress,
     *       'Directions',
     *       'Please open: ' + map.getMapUrl() + '&key=YOUR_API_KEY', {
     *         htmlBody: 'See below.<br/><img src="cid:mapImage">',
     *         inlineImages: {
     *           mapImage: Utilities.newBlob(map.getMapImage(), 'image/png')
     *         }
     *       }
     *     );
     *
     * See also
     *
     * Google Directions API
     */
    interface DirectionFinder {

      /**
       * Adds a waypoint that the route must pass through, using a point (lat/lng).
       *
       *
       *     // Creates a DirectionFinder with a wapoint at Lincoln Center.
       *     var directionFinder = Maps.newDirectionFinder().addWaypoint(40.772628, -73.984243);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#addWaypoint(Number,Number)
       * @param latitude Latitude of the waypoint.
       * @param longitude Longitude of the waypoint.
       */
      addWaypoint(latitude: number, longitude: number): DirectionFinder;

      /**
       * Adds a waypoint that the route must pass through, using an address.
       *
       *
       *     // Creates a DirectionFinder with a wapoint at Lincoln Center.
       *     var directionFinder = Maps.newDirectionFinder().addWaypoint('Lincoln Center, New York, NY');
       * https://developers.google.com/apps-script/reference/maps/direction-finder#addWaypoint(String)
       * @param address An address.
       */
      addWaypoint(address: string): DirectionFinder;

      /**
       * Clears the current set of waypoints.
       *
       *
       *     var directionFinder = Maps.newDirectionFinder()
       *     // ...
       *     // Do something interesting here ...
       *     // ...
       *     // Remove all waypoints added with addWaypoint().
       *     directionFinder.clearWaypoints();
       * https://developers.google.com/apps-script/reference/maps/direction-finder#clearWaypoints()
       */
      clearWaypoints(): DirectionFinder;

      /**
       * Gets the directions using the origin, destination, and other options that were set.
       *
       *
       *     // Logs how long it would take to walk from Times Square to Central Park.
       *     var directions = Maps.newDirectionFinder()
       *         .setOrigin('Times Square, New York, NY')
       *         .setDestination('Central Park, New York, NY')
       *         .setMode(Maps.DirectionFinder.Mode.WALKING)
       *         .getDirections();
       *     Logger.log(directions.routes[0].legs[0].duration.text);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#getDirections()
       */
      getDirections(): any;

      /**
       * Sets whether or not alternative routes should be returned, instead of just the highest ranked
       * route (defaults to false). If true, the resulting object's routes array may
       * contain multiple entries.
       *
       *
       *     // Creates a DirectionFinder with alernative routes enabled.
       *     var directionFinder = Maps.newDirectionFinder().setAlternatives(true);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setAlternatives(Boolean)
       * @param useAlternatives true to return alternative routes, false otherwise
       */
      setAlternatives(useAlternatives: boolean): DirectionFinder;

      /**
       * Sets the desired time of arrival (when applicable).
       *
       *
       *     // Creates a DirectionFinder with an arrival time of 2 hours from now.
       *     var now = new Date();
       *     var arrive = new Date(now.getTime() + (2 * 60 * 60 * 1000));
       *     var directionFinder = Maps.newDirectionFinder().setArrive(arrive);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setArrive(Date)
       * @param time the time of arrival
       */
      setArrive(time: Date): DirectionFinder;

      /**
       * Sets whether to avoid certain types of restrictions.
       *
       *
       *     // Creates a DirectionFinder that avoid highways.
       *     var directionFinder = Maps.newDirectionFinder().setAvoid(Maps.DirectionFinder.Avoid.HIGHWAYS);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setAvoid(String)
       * @param avoid a constant value from Avoid
       */
      setAvoid(avoid: string): DirectionFinder;

      /**
       * Sets the desired time of departure (when applicable).
       *
       *
       *     // Creates a DirectionFinder with a departure time of 1 hour from now.
       *     var now = new Date();
       *     var depart = new Date(now.getTime() + (1 * 60 * 60 * 1000));
       *     var directionFinder = Maps.newDirectionFinder().setDepart(depart);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setDepart(Date)
       * @param time the time of departure
       */
      setDepart(time: Date): DirectionFinder;

      /**
       * Sets the ending location for which to calculate directions to, using a point (lat/lng).
       *
       *
       *     // Creates a DirectionFinder with the destination set to Central Park.
       *     var directionFinder = Maps.newDirectionFinder().setDestination(40.777052, -73.975464);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setDestination(Number,Number)
       * @param latitude the latitude of the ending location
       * @param longitude the longitude of the ending location
       */
      setDestination(latitude: number, longitude: number): DirectionFinder;

      /**
       * Sets the ending location for which to calculate directions to, using an address.
       *
       *
       *     // Creates a DirectionFinder with the destination set to Central Park.
       *     var directionFinder = Maps.newDirectionFinder().setDestination('Central Park, New York, NY');
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setDestination(String)
       * @param address the ending address
       */
      setDestination(address: string): DirectionFinder;

      /**
       * Sets the language to be used for the directions.
       *
       *
       *     // Creates a DirectionFinder with the language set to French.
       *     var directionFinder = Maps.newDirectionFinder().setLanguage('fr');
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setLanguage(String)
       * @param language a BCP-47 language identifier
       */
      setLanguage(language: string): DirectionFinder;

      /**
       * Sets the mode of travel (defaults to driving).
       *
       *
       *     // Creates a DirectionFinder with the mode set to walking.
       *     var directionFinder = Maps.newDirectionFinder().setMode(Maps.DirectionFinder.Mode.WALKING);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setMode(String)
       * @param mode a constant value from Mode
       */
      setMode(mode: string): DirectionFinder;

      /**
       * Sets whether or not to optimize the provided route by rearranging the waypoints in a more
       * efficient order (defaults to false).
       *
       *
       *     // Creates a DirectionFinder with wapoint optimization enabled.
       *     var directionFinder = Maps.newDirectionFinder().setOptimizeWaypoints(true);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setOptimizeWaypoints(Boolean)
       * @param optimizeOrder true to optimize the order, or false otherwise
       */
      setOptimizeWaypoints(optimizeOrder: boolean): DirectionFinder;

      /**
       * Sets the starting location from which to calculate directions, using a point (lat/lng).
       *
       *
       *     // Creates a DirectionFinder with the origin set to Times Square.
       *     var directionFinder = Maps.newDirectionFinder().setOrigin(40.759011, -73.984472);
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setOrigin(Number,Number)
       * @param latitude the latitude of the starting location
       * @param longitude the longitude of the starting location
       */
      setOrigin(latitude: number, longitude: number): DirectionFinder;

      /**
       * Sets the starting location from which to calculate directions, using an address.
       *
       *
       *     // Creates a DirectionFinder with the origin set to Times Square.
       *     var directionFinder = Maps.newDirectionFinder().setOrigin('Times Square, New York, NY');
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setOrigin(String)
       * @param address the starting address
       */
      setOrigin(address: string): DirectionFinder;

      /**
       * Sets a region to use when interpreting location names. The supported region codes correspond to
       * the ccTLDs supported by Google Maps. For example, the region code "uk" corresponds to
       * "maps.google.co.uk".
       *
       *
       *     // Creates a DirectionFinder with the region set to France.
       *     var directionFinder = Maps.newDirectionFinder().setRegion('fr');
       * https://developers.google.com/apps-script/reference/maps/direction-finder#setRegion(String)
       * @param region the region code to use
       */
      setRegion(region: string): DirectionFinder;
    }
    /**
     * A collection of enums used by DirectionFinder.
     */
    interface DirectionFinderEnums {
      Avoid: typeof Avoid;
      Mode: typeof Mode;
    }
    /**
     * Allows for the sampling of elevations at particular locations.
     * The example below shows how you can use this class to determine the highest point along the route
     * from Denver to Grand Junction in Colorado, plot it on a map, and save the map to Google Drive.
     *
     *     // Get directions from Denver to Grand Junction.
     *     var directions = Maps.newDirectionFinder()
     *         .setOrigin('Denver, CO')
     *         .setDestination('Grand Junction, CO')
     *         .setMode(Maps.DirectionFinder.Mode.DRIVING)
     *         .getDirections();
     *     var route = directions.routes[0];
     *
     *     // Get elevation samples along the route.
     *     var numberOfSamples = 30;
     *     var response = Maps.newElevationSampler()
     *         .samplePath(route.overview_polyline.points, numberOfSamples)
     *
     *     // Determine highest point.
     *     var maxElevation = Number.MIN_VALUE;
     *     var highestPoint = null;
     *     for (var i = 0; i < response.results.length; i++) {
     *       var sample = response.results[i];
     *       if (sample.elevation > maxElevation) {
     *         maxElevation = sample.elevation;
     *         highestPoint = sample.location;
     *       }
     *     }
     *
     *     // Add the path and marker to a map.
     *     var map = Maps.newStaticMap()
     *         .addPath(route.overview_polyline.points)
     *         .addMarker(highestPoint.lat, highestPoint.lng);
     *
     *     // Save the map to your drive
     *     DocsList.createFile(Utilities.newBlob(map.getMapImage(), 'image/png', 'map.png'));
     *
     * See also
     *
     * Google Elevation API
     */
    interface ElevationSampler {

      /**
       * Returns elevation data for a single point (lat/lng).
       *
       *
       *     // Gets the elevation of Times Square using a point.
       *     var data = Maps.newElevationSampler().sampleLocation(40.759011, -73.984472);
       *     Logger.log(data.results[0].elevation);
       * https://developers.google.com/apps-script/reference/maps/elevation-sampler#sampleLocation(Number,Number)
       * @param latitude the latitude of the point to sample
       * @param longitude the longitude of the point to sample
       */
      sampleLocation(latitude: number, longitude: number): any;

      /**
       * Returns elevation data for a series of points (lat/lng).
       *
       *
       *     // Gets the elevation of Times Square and Central Park using points.
       *     var data = Maps.newElevationSampler().sampleLocations([
       *         // Times Square
       *         40.759011, -73.984472,
       *         // Central Park
       *         40.777052, -73.975464
       *     ]);
       *     Logger.log('Times Square: ' + data.results[0].elevation);
       *     Logger.log('Central Park: ' + data.results[1].elevation);
       * https://developers.google.com/apps-script/reference/maps/elevation-sampler#sampleLocations(Number)
       * @param points an array of latitude/longitude pairs
       */
      sampleLocations(points: number[]): any;

      /**
       * Returns elevation data for the points in an encoded polyline.
       *
       *
       *     // Gets the elevation of Times Square and Central Park using a polyline.
       *     var data = Maps.newElevationSampler().sampleLocations('yvwwF|aqbMwoBiw@');
       *     Logger.log('Times Square: ' + data.results[0].elevation);
       *     Logger.log('Central Park: ' + data.results[1].elevation);
       * https://developers.google.com/apps-script/reference/maps/elevation-sampler#sampleLocations(String)
       * @param encodedPolyline an encoded polyline of points to sample
       */
      sampleLocations(encodedPolyline: string): any;

      /**
       * Returns elevation data for a number of samples along a line, defined using a series of points.
       *
       *
       *     // Gets the elevation of five points between Times Square and Central Park.
       *     var data = Maps.newElevationSampler().samplePath([
       *         // Times Square
       *         40.759011, -73.984472,
       *         // Central Park
       *         40.777052, -73.975464
       *     ], 5);
       *     for (var i = 0; i < data.results.length; i++) {
       *       Logger.log(data.results[i].elevation);
       *     }
       * https://developers.google.com/apps-script/reference/maps/elevation-sampler#samplePath(Number,Integer)
       * @param points an array of latitude/longitude pairs defining a path to sample over
       * @param numSamples the number of points to sample along the path of points
       */
      samplePath(points: number[], numSamples: Integer): any;

      /**
       * Returns elevation data for a number of samples along a line, defined using an encoded polyline.
       *
       *
       *     // Gets the elevation of five points between Times Square and Central Park.
       *     var data = Maps.newElevationSampler().samplePath('yvwwF|aqbMwoBiw@', 5);
       *     for (var i = 0; i < data.results.length; i++) {
       *       Logger.log(data.results[i].elevation);
       *     }
       * https://developers.google.com/apps-script/reference/maps/elevation-sampler#samplePath(String,Integer)
       * @param encodedPolyline an encoded polyline of points defining a path to sample over
       * @param numSamples the number of points to sample along the path of points
       */
      samplePath(encodedPolyline: string, numSamples: Integer): any;
    }
    /**
     * An enum representing the format of the map image.
     * See also
     *
     * Google Static Maps API
     */
    enum Format { PNG, PNG8, PNG32, GIF, JPG, JPG_BASELINE }
    /**
     * Allows for the conversion between an address and geographical coordinates.
     * The example below shows how you can use this class find the top nine matches for the location
     * "Main St" in Colorado, add them to a map, and then embed it in a new Google Doc.
     *
     *     // Find the best matches for "Main St" in Colorado.
     *     var response = Maps.newGeocoder()
     *         // The latitudes and longitudes of southwest and northeast corners of Colorado, respectively.
     *         .setBounds(36.998166, -109.045486, 41.001666,-102.052002)
     *         .geocode('Main St');
     *
     *     // Create a Google Doc and map.
     *     var doc = DocumentApp.create('My Map');
     *     var map = Maps.newStaticMap();
     *
     *     // Add each result to the map and doc.
     *     for (var i = 0; i < response.results.length && i < 9; i++) {
     *       var result = response.results[i];
     *       map.setMarkerStyle(null, null, i + 1);
     *       map.addMarker(result.geometry.location.lat, result.geometry.location.lng);
     *       doc.appendListItem(result.formatted_address);
     *     }
     *
     *     // Add the finished map to the doc.
     *     doc.appendImage(Utilities.newBlob(map.getMapImage(), 'image/png'));
     *
     * See also
     *
     * Google Geocoding API
     */
    interface Geocoder {

      /**
       * Gets the approximate geographic points for a given address.
       *
       *
       *     // Gets the geographic coordinates for Times Square.
       *     var response = Maps.newGeocoder().geocode('Times Square, New York, NY');
       *     for (var i = 0; i < response.results.length; i++) {
       *       var result = response.results[i];
       *       Logger.log('%s: %s, %s', result.formatted_address, result.geometry.location.lat,
       *           result.geometry.location.lng);
       *     }
       * https://developers.google.com/apps-script/reference/maps/geocoder#geocode(String)
       * @param address an address
       */
      geocode(address: string): any;

      /**
       * Gets the approximate addresses for a given geographic point.
       *
       *
       *     // Gets the address of a point in Times Square.
       *     var response = Maps.newGeocoder().reverseGeocode(40.758577, -73.984464);
       *     for (var i = 0; i < response.results.length; i++) {
       *       var result = response.results[i];
       *       Logger.log('%s: %s, %s', result.formatted_address, result.geometry.location.lat,
       *           result.geometry.location.lng);
       *     }
       * https://developers.google.com/apps-script/reference/maps/geocoder#reverseGeocode(Number,Number)
       * @param latitude the latitude of the point
       * @param longitude the longitude of the point
       */
      reverseGeocode(latitude: number, longitude: number): any;

      /**
       * Sets the bounds of an area that should be given extra preference in the results.
       *
       *
       *     // Creates a Geocoder that prefers points in the area of Manhattan.
       *     var geocoder = Maps.newGeocoder()
       *         .setBounds(40.699642, -74.021072, 40.877569, -73.908548);
       * https://developers.google.com/apps-script/reference/maps/geocoder#setBounds(Number,Number,Number,Number)
       * @param swLatitude the latitude of the south west corner of the bounds
       * @param swLongitude the longitude of the south west corner of the bounds
       * @param neLatitude the latitude of the north east corner of the bounds
       * @param neLongitude the longitude of the north east corner of the bounds
       */
      setBounds(swLatitude: number, swLongitude: number, neLatitude: number, neLongitude: number): Geocoder;

      /**
       * Sets the language to be used in the results.
       *
       *
       *     // Creates a Geocoder with the language set to French.
       *     var geocoder = Maps.newGeocoder().setLanguage('fr');
       * https://developers.google.com/apps-script/reference/maps/geocoder#setLanguage(String)
       * @param language a BCP-47 language identifier
       */
      setLanguage(language: string): Geocoder;

      /**
       * Sets a region to use when interpreting location names. The supported region codes correspond to
       * the ccTLDs supported by Google Maps. For example, the region code "uk" corresponds to
       * "maps.google.co.uk".
       *
       *
       *     // Creates a Geocoder with the region set to France.
       *     var geocoder = Maps.newGeocoder().setRegion('fr');
       * https://developers.google.com/apps-script/reference/maps/geocoder#setRegion(String)
       * @param region the region code to use
       */
      setRegion(region: string): Geocoder;
    }
    /**
     * Allows for direction finding, geocoding, elevation sampling and the creation of static map
     * images.
     */
    interface Maps {
      DirectionFinder: DirectionFinderEnums;
      StaticMap: StaticMapEnums;

      /**
       * Decodes an encoded polyline string back into an array of points.
       *
       *
       *     // Decodes a string representation of the latitudes and longitudes of Minneapolis and Milwaukee
       *     // respectively.
       *     var polyline = 'qvkpG`qhxPbgyI_zq_@';
       *     var points = Maps.decodePolyline(polyline);
       *     for (var i = 0; i < points.length; i+= 2) {
       *       Logger.log('%s, %s', points[i], points[i+1]);
       *     }
       * https://developers.google.com/apps-script/reference/maps/maps#decodePolyline(String)
       * @param polyline An encoded polyline to decode.
       */
      decodePolyline(polyline: string): number[];

      /**
       * Encodes an array of points into a string.
       *
       *
       *     // The latitudes and longitudes of New York and Boston respectively.
       *     var points = [40.77, -73.97, 42.34, -71.04];
       *     var polyline = Maps.encodePolyline(points);
       * https://developers.google.com/apps-script/reference/maps/maps#encodePolyline(Number)
       * @param points An array of latitude/longitude pairs to encode.
       */
      encodePolyline(points: number[]): string;

      /**
       * Creates a new DirectionFinder object.
       * https://developers.google.com/apps-script/reference/maps/maps#newDirectionFinder()
       */
      newDirectionFinder(): DirectionFinder;

      /**
       * Creates an ElevationSampler object.
       * https://developers.google.com/apps-script/reference/maps/maps#newElevationSampler()
       */
      newElevationSampler(): ElevationSampler;

      /**
       * Creates a new Geocoder object.
       * https://developers.google.com/apps-script/reference/maps/maps#newGeocoder()
       */
      newGeocoder(): Geocoder;

      /**
       * Creates a new StaticMap object.
       * https://developers.google.com/apps-script/reference/maps/maps#newStaticMap()
       */
      newStaticMap(): StaticMap;

      /**
       * Enables the use of an externally established Google Maps APIs Premium Plan account,
       * to leverage additional quota
       * allowances. Your client ID and signing key can be obtained from the Google Enterprise
       * Support Portal. Set these values to null to go back to using the default quota
       * allowances.
       *
       *
       *
       *
       * https://developers.google.com/apps-script/reference/maps/maps#setAuthentication(String,String)
       * @param clientId A client identifier.
       * @param signingKey A private signing key.
       */
      setAuthentication(clientId: string, signingKey: string): void;
    }
    /**
     * An enum representing the size of a marker added to a map.
     * See also
     *
     * Google Static Maps API
     */
    enum MarkerSize { TINY, MID, SMALL }
    /**
     * An enum representing the mode of travel to use when finding directions.
     */
    enum Mode { DRIVING, WALKING, BICYCLING, TRANSIT }
    /**
     * Allows for the creation and decoration of static map images.
     *
     * The example below shows how you can use this class to create a map of New York City's Theatre
     * District, including nearby train stations, and display it in a simple web app.
     *
     *     // Create a map centered on Times Square.
     *     var map = Maps.newStaticMap()
     *         .setSize(600, 600)
     *         .setCenter('Times Square, New York, NY');
     *
     *     // Add markers for the nearbye train stations.
     *     map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.RED, 'T');
     *     map.addMarker('Grand Central Station, New York, NY');
     *     map.addMarker('Penn Station, New York, NY');
     *
     *     // Show the boundaries of the Theatre District.
     *     var corners = [
     *       '8th Ave & 53rd St, New York, NY',
     *       '6th Ave & 53rd St, New York, NY',
     *       '6th Ave & 40th St, New York, NY',
     *       '8th Ave & 40th St, New York, NY'
     *     ];
     *     map.setPathStyle(4, Maps.StaticMap.Color.BLACK, Maps.StaticMap.Color.BLUE);
     *     map.beginPath();
     *     for (var i = 0; i < corners.length; i++) {
     *       map.addAddress(corners[i]);
     *     }
     *     // All static map URLs require an API key.
     *     var url = map.getMapUrl() + "&key=YOUR_API_KEY";
     *
     * See also
     *
     * Google Static Maps API
     */
    interface StaticMap {

      /**
       * Adds a new address to the current path definition.
       *
       *
       *     // Creates a map and adds a path from New York to Boston.
       *     var map = Maps.newStaticMap()
       *         .beginPath()
       *         .addAddress('New York, NY')
       *         .addAddress('Boston, MA')
       *         .endPath();
       * https://developers.google.com/apps-script/reference/maps/static-map#addAddress(String)
       * @param address An address to add.
       */
      addAddress(address: string): StaticMap;

      /**
       * Adds a marker to the map using a point (lat/lng).
       *
       *
       *     // Creates a map and adds a marker at the specified coordinates.
       *     var map = Maps.newStaticMap().addMarker(40.741799, -74.004207);
       * https://developers.google.com/apps-script/reference/maps/static-map#addMarker(Number,Number)
       * @param latitude The latitude of the new marker.
       * @param longitude The longitude of the new marker.
       */
      addMarker(latitude: number, longitude: number): StaticMap;

      /**
       * Adds a marker to the map using an address.
       *
       *
       *     // Creates a map and adds a marker at the specified address.
       *     var map = Maps.newStaticMap().addMarker('76 9th Ave, New York NY');
       * https://developers.google.com/apps-script/reference/maps/static-map#addMarker(String)
       * @param address The address at wich to place the new marker.
       */
      addMarker(address: string): StaticMap;

      /**
       * Adds a path to the map using an array of points.
       *
       *
       *     // Creates a map and adds a path from New York to Boston.
       *     var map = Maps.newStaticMap()
       *         .addPath([40.714353, -74.005973, 42.358431, -71.059773]);
       * https://developers.google.com/apps-script/reference/maps/static-map#addPath(Number)
       * @param points An array of latitude/longitude pairs that define the path.
       */
      addPath(points: number[]): StaticMap;

      /**
       * Adds a path to the map using an encoded polyline.
       *
       *
       *     // Creates a map and adds a path from New York to Boston.
       *     var polyline = Maps.encodePolyline([40.714353, -74.005973, 42.358431, -71.059773]);
       *     var map = Maps.newStaticMap().addPath(polyline);
       * https://developers.google.com/apps-script/reference/maps/static-map#addPath(String)
       * @param polyline An encoded polyline.
       */
      addPath(polyline: string): StaticMap;

      /**
       * Adds a new point (lat/lng) to the current path definition.
       *
       *
       *     // Creates a map and adds a path from New York to Boston.
       *     var map = Maps.newStaticMap()
       *         .beginPath()
       *         .addPoint(40.714353, -74.005973)
       *         .addPoint(42.358431, -71.059773)
       *         .endPath();
       * https://developers.google.com/apps-script/reference/maps/static-map#addPoint(Number,Number)
       * @param latitude The latitude of the point.
       * @param longitude The longitude of the point.
       */
      addPoint(latitude: number, longitude: number): StaticMap;

      /**
       * Adds a point (lat/lng) location that must be visible in the map.
       *
       *
       *     // Creates a map where New York and Boston are visible.
       *     var map = Maps.newStaticMap()
       *         .addVisible(40.714353, -74.005973);
       *         .addVisible(42.358431, -71.059773)
       * https://developers.google.com/apps-script/reference/maps/static-map#addVisible(Number,Number)
       * @param latitude The latitude of the point.
       * @param longitude The longitude of the point.
       */
      addVisible(latitude: number, longitude: number): StaticMap;

      /**
       * Adds an address location that must be visible in the map.
       *
       *
       *     // Creates a map where New York and Boston are visible.
       *     var map = Maps.newStaticMap()
       *         .addVisible('New York, NY')
       *         .addVisible('Boston, MA');
       * https://developers.google.com/apps-script/reference/maps/static-map#addVisible(String)
       * @param address An address that must be visible in the map.
       */
      addVisible(address: string): StaticMap;

      /**
       * Starts a new path definition. Calls to addAddress() and addPoint() define each
       * new vertex in the path. The path is completed when endPath() is called.
       *
       *
       *     // Creates a map and adds a path from New York to Boston.
       *     var map = Maps.newStaticMap()
       *         .beginPath()
       *         .addAddress('New York, NY')
       *         .addAddress('Boston, MA')
       *         .endPath();
       * https://developers.google.com/apps-script/reference/maps/static-map#beginPath()
       */
      beginPath(): StaticMap;

      /**
       * Clears the current set of markers.
       *
       *
       *     var map = Maps.newStaticMap();
       *     // ...
       *     // Do something interesting here ...
       *     // ...
       *     // Remove all markers on the map.
       *     map.clearMarkers();
       * https://developers.google.com/apps-script/reference/maps/static-map#clearMarkers()
       */
      clearMarkers(): StaticMap;

      /**
       * Clear the current set of paths.
       *
       *
       *     var map = Maps.newStaticMap();
       *     // ...
       *     // Do something interesting here ...
       *     // ...
       *     // Remove all paths on the map.
       *     map.clearPaths();
       * https://developers.google.com/apps-script/reference/maps/static-map#clearPaths()
       */
      clearPaths(): StaticMap;

      /**
       * Clears the current set of visible locations.
       *
       *
       *     var map = Maps.newStaticMap();
       *     // ...
       *     // Do something interesting here ...
       *     // ...
       *     // Remove all visible locations created with addVisible().
       *     map.clearVisibles();
       * https://developers.google.com/apps-script/reference/maps/static-map#clearVisibles()
       */
      clearVisibles(): StaticMap;

      /**
       * Completes a path definition started with beginPath().
       *
       *
       *     // Creates a map and adds a path from New York to Boston.
       *     var map = Maps.newStaticMap()
       *         .beginPath()
       *         .addAddress('New York, NY')
       *         .addAddress('Boston, MA')
       *         .endPath();
       * https://developers.google.com/apps-script/reference/maps/static-map#endPath()
       */
      endPath(): StaticMap;

      /**
       * Return the data inside this object as a blob converted to the specified content type. This
       * method adds the appropriate extension to the filename—for example, "myfile.pdf". However, it
       * assumes that the part of the filename that follows the last period (if any) is an existing
       * extension that should be replaced. Consequently, "ShoppingList.12.25.2014" becomes
       * "ShoppingList.12.25.pdf".
       *
       *
       * To view the daily quotas for conversions, see Quotas for Google
       * Services. Newly created Google Workspace domains might be temporarily subject to stricter
       * quotas.
       * https://developers.google.com/apps-script/reference/maps/static-map#getAs(String)
       * @param contentType The MIME type to convert to. For most blobs, 'application/pdf' is the only valid option. For images in BMP, GIF, JPEG, or PNG format, any of 'image/bmp', 'image/gif', 'image/jpeg', or 'image/png' are also valid.
       */
      getAs(contentType: string): Base.Blob;

      /**
       * Gets the image data as a Blob.
       *
       *
       *     // Creates a map centered on Times Square and saves it to Google Drive.
       *     var map = Maps.newStaticMap().setCenter('Times Square, New York, NY');
       *     DocsList.createFile(map);  // You can call map.getBlob() explicitly or use it
       *                                // implicitly by passing the map where a blob is expected.
       * https://developers.google.com/apps-script/reference/maps/static-map#getBlob()
       */
      getBlob(): Base.Blob;

      /**
       * Gets the raw image data as a byte array.
       *
       *
       * In general, prefer using getBlob() which allows for simpler interactions with other
       * services.
       *
       *
       *     // Creates a map centered on Times Square and saves it to Google Drive.
       *     var map = Maps.newStaticMap().setCenter('Times Square, New York, NY');
       *     DocsList.createFile(Utilities.newBlob(map.getMapImage(), 'image/png', 'map.png'));
       * https://developers.google.com/apps-script/reference/maps/static-map#getMapImage()
       */
      getMapImage(): Byte[];

      /**
       * Gets the URL of the map image.
       *
       *
       *     // Creates a map centered on Times Square and gets the URL.
       *     var map = Maps.newStaticMap().setCenter('Times Square, New York, NY');
       *     // All static map URLs require an API key.
       *     Logger.log(map.getMapUrl() + "&key=YOUR_API_KEY");
       * https://developers.google.com/apps-script/reference/maps/static-map#getMapUrl()
       */
      getMapUrl(): string;

      /**
       * Sets the center of the map using a point (lat/lng).
       *
       *
       *     // Creates a map centered on Times Square, using its coordinates.
       *     var map = Maps.newStaticMap().setCenter(40.759011, -73.984472);
       * https://developers.google.com/apps-script/reference/maps/static-map#setCenter(Number,Number)
       * @param latitude The latitude of the center.
       * @param longitude The longitude of the center.
       */
      setCenter(latitude: number, longitude: number): StaticMap;

      /**
       * Sets the center of the map using an address.
       *
       *
       *     // Creates a map centered on Times Square, using its address.
       *     var map = Maps.newStaticMap().setCenter('Times Square, New York, NY');
       * https://developers.google.com/apps-script/reference/maps/static-map#setCenter(String)
       * @param address The address of the center.
       */
      setCenter(address: string): StaticMap;

      /**
       * Sets the custom marker image to use when creating new markers. Markers that have already been
       * added are not affected.
       *
       *
       *     // Creates a map with markers set to be medium sized, black, and labeled with the number "1".
       *     var map = Maps.newStaticMap()
       *         .setCustomMarkerStyle('http://www.example.com/marker.png', false);
       * https://developers.google.com/apps-script/reference/maps/static-map#setCustomMarkerStyle(String,Boolean)
       * @param imageUrl Specifies a URL to use as the marker's custom icon. Images may be in PNG, JPEG or GIF formats, though PNG is recommended.
       * @param useShadow Indicates that the marker should have a shadow generated, based on the image's visible region and its opacity/transparency.
       */
      setCustomMarkerStyle(imageUrl: string, useShadow: boolean): StaticMap;

      /**
       * Sets the format of the map image.
       *
       *
       *     // Creates a map with the image format set to PNG.
       *     var map = Maps.newStaticMap().setFormat(Maps.StaticMap.Format.PNG);
       * https://developers.google.com/apps-script/reference/maps/static-map#setFormat(String)
       * @param format A constant value from Format.
       */
      setFormat(format: string): StaticMap;

      /**
       * Sets the language to be used for text on the map (where avaialbe).
       *
       *
       *     // Creates a map with the language set to French.
       *     var map = Maps.newStaticMap().setLanguage('fr');
       * https://developers.google.com/apps-script/reference/maps/static-map#setLanguage(String)
       * @param language A BCP-47 language identifier.
       */
      setLanguage(language: string): StaticMap;

      /**
       * Sets the type of map to be shown.
       *
       *
       *     // Creates a satellite map.
       *     var map = Maps.newStaticMap().setMapType(Maps.StaticMap.Type.SATELLITE);
       * https://developers.google.com/apps-script/reference/maps/static-map#setMapType(String)
       * @param mapType A constant value from Type.
       */
      setMapType(mapType: string): StaticMap;

      /**
       * Sets the marker style to use when creating new markers. Markers that have already been added
       * are not affected.
       *
       *
       *     // Creates a map with markers set to be medium sized, black, and labeled with the number "1".
       *     var map = Maps.newStaticMap()
       *         .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.BLACK , '1');
       * https://developers.google.com/apps-script/reference/maps/static-map#setMarkerStyle(String,String,String)
       * @param size A constant value from MarkerSize.
       * @param color A string in the format "0xrrggbb" or a constant value from Color.
       * @param label A string containing a single character A-Z or 0-9.
       */
      setMarkerStyle(size: string, color: string, label: string): StaticMap;

      /**
       * Sets whether or not to use specialized tile sets for mobile devices.
       *
       *
       *     // Creates a map that uses mobile-friendly tiles.
       *     var map = Maps.newStaticMap().setMobile(true);
       * https://developers.google.com/apps-script/reference/maps/static-map#setMobile(Boolean)
       * @param useMobileTiles Whether or not to use mobile tiles.
       */
      setMobile(useMobileTiles: boolean): StaticMap;

      /**
       * Sets the path style to use when creating new paths. Paths that have already been added are not
       * affected.
       *
       *
       *     // Creates a map with paths set to be 1 pixel wide with a black line and a white fill.
       *     var map = Maps.newStaticMap()
       *         .setPathStyle(1, Maps.StaticMap.Color.BLACK , 'red');
       * https://developers.google.com/apps-script/reference/maps/static-map#setPathStyle(Integer,String,String)
       * @param weight The width of lines in pixels.
       * @param color The line color, as a string in the format "0xrrggbb" or a constant value from Color.
       * @param fillColor The fill color, a string in the format "0xrrggbb" or a constant value from Color.
       */
      setPathStyle(weight: Integer, color: string, fillColor: string): StaticMap;

      /**
       * Sets the width and height of the map image in pixels.
       *
       *
       *     // Creates a map 400px wide by 300px high.
       *     var map = Maps.newStaticMap().setSize(400, 300);
       * https://developers.google.com/apps-script/reference/maps/static-map#setSize(Integer,Integer)
       * @param width The width of the image in pixels.
       * @param height The height of the image in pixels.
       */
      setSize(width: Integer, height: Integer): StaticMap;

      /**
       * Sets the zoom factor, or magnification level, used for the map.
       *
       *
       *     // Creates a map with a zoom factor of 10.
       *     var map = Maps.newStaticMap().setZoom(10);
       * https://developers.google.com/apps-script/reference/maps/static-map#setZoom(Integer)
       * @param zoom A value from zero to 21, inclusive.
       */
      setZoom(zoom: Integer): StaticMap;
    }
    /**
     * A collection of enums used by StaticMap.
     */
    interface StaticMapEnums {
      Color: typeof Color;
      Format: typeof Format;
      MarkerSize: typeof MarkerSize;
      Type: typeof Type;
    }
    /**
     * An enum representing the type of map to render.
     * See also
     *
     * Google Static Maps API
     */
    enum Type { ROADMAP, SATELLITE, TERRAIN, HYBRID }
  }
}

declare var Maps: GoogleAppsScript.Maps.Maps;
