/*
 * μlogger
 *
 * Copyright(C) 2019 Bartek Fabiszewski (www.fabiszewski.net)
 *
 * This is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 */

/* eslint-disable func-style,lines-between-class-members,class-methods-use-this,max-classes-per-file */
export const setupGmapsStub = () => {
  // noinspection JSUnresolvedVariable,JSConstantReassignment,JSUnusedGlobalSymbols
  window.google = {
    maps: {
      Animation: {
        BOUNCE: 1,
        DROP: 2
      },
      event: {
        addListener: () => {/* ignore */},
        addListenerOnce: () => {/* ignore */},
        removeListener: () => {/* ignore */},
        clearListeners: () => {/* ignore */}
      },
      Icon: class Icon {/* ignore */},
      InfoWindow: class InfoWindow {
        addListener() {/* ignore */}
        open() {/* ignore */}
        close() {/* ignore */}
        getMap() {/* ignore */}
        setContent() {/* ignore */}
      },
      LatLng: class LatLng {
        constructor(lat, lng) {
          this.latitude = parseFloat(lat);
          this.longitude = parseFloat(lng);
        }
        lat() { return this.latitude; }
        lng() { return this.longitude; }
      },
      LatLngBounds: class LatLngBounds {
        constructor(sw, ne) {
          this.sw = sw;
          this.ne = ne;
        }
        extend() {/* ignore */}
        getNorthEast() { return this.ne; }
        getSouthWest() { return this.sw; }
      },
      Map: class Map {
        fitBounds() {/* ignore */}
        getBounds() {/* ignore */}
        getCenter() {/* ignore */}
        getDiv() {/* ignore */}
        getZoom() {/* ignore */}
        setCenter() {/* ignore */}
        setMapTypeId() {/* ignore */}
        setOptions() {/* ignore */}
        setZoom() {/* ignore */}
      },
      MapTypeId: {
        HYBRID: 1,
        ROADMAP: 2,
        SATELLITE: 3,
        TERRAIN: 4
      },
      Marker: class Marker {
        addListener() {/* ignore */}
        getIcon() {/* ignore */}
        getPosition() {/* ignore */}
        setAnimation() {/* ignore */}
        setIcon() {/* ignore */}
        setMap() {/* ignore */}
      },
      Point: class Point {/* ignore */},
      Polyline: class Polyline {
        constructor(opts) {
          this.options = opts;
          this.path = [];
        }
        getPath() { return this.path; }
        setMap() {/* ignore */}
      }
    }
  };
};

export const clear = () => {
  // noinspection JSAnnotator,JSUnresolvedVariable,JSConstantReassignment
  delete window.google;
};
