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

#include "src/ui/testing/mock_input_device_registry.h"

namespace ui_input {
namespace test {

MockInputDeviceRegistry::MockInputDeviceRegistry(OnDeviceCallback on_device_callback,
                                                 OnReportCallback on_report_callback)
    : on_device_callback_(std::move(on_device_callback)),
      on_report_callback_(std::move(on_report_callback)) {}

MockInputDeviceRegistry::~MockInputDeviceRegistry() {}

void MockInputDeviceRegistry::RegisterDevice(
    fuchsia::ui::input::DeviceDescriptor descriptor,
    fidl::InterfaceRequest<fuchsia::ui::input::InputDevice> input_device_request) {
  uint32_t device_id = ++next_device_token_;

  std::unique_ptr<MockInputDevice> input_device = std::make_unique<MockInputDevice>(
      device_id, std::move(descriptor), std::move(input_device_request),
      on_report_callback_.share());

  MockInputDevice* input_device_ptr = input_device.get();
  devices_by_id_.emplace(device_id, std::move(input_device));

  if (on_device_callback_)
    on_device_callback_(input_device_ptr);
}

}  // namespace test
}  // namespace ui_input
