/**
 * Copyright 2024 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* eslint-env mocha */
/* eslint func-names: 0 */
/* eslint no-console: 0 */

// Constructor to build a mock for the global Pebble object:
module.exports = function() {
  const simple = require('simple-mock');
  const assert = require('assert');

  var eventHandlers = {
    appmessage: [],
    ready: []
  };

  simple.mock(this, 'addEventListener', (event_name, handler) => {
    assert(event_name in eventHandlers, '\'' + event_name + '\' not known');
    eventHandlers[event_name].push(handler);
  });

  simple.mock(this, 'handleEvent', (event) => {
    assert(event.name in eventHandlers, '\'' + event.name + '\' not known');
    for (let handler of eventHandlers[event.name]) {
      handler(event);
    }
  });

  simple.mock(this, 'sendAppMessage', (msg, complCb, errCb) => {
    console.log(
      'sendAppMessage: ' + msg + ' complCb: ' + complCb + ' errCb: ' + errCb);
    if (complCb) {
      complCb(msg);
    }
  });
};