// 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.

#include "chromeos/dbus/fake_lorgnette_manager_client.h"

#include <utility>

#include "base/bind.h"
#include "base/callback.h"
#include "base/location.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"

namespace chromeos {

FakeLorgnetteManagerClient::FakeLorgnetteManagerClient() = default;

FakeLorgnetteManagerClient::~FakeLorgnetteManagerClient() = default;

void FakeLorgnetteManagerClient::Init(dbus::Bus* bus) {}

void FakeLorgnetteManagerClient::ListScanners(
    const ListScannersCallback& callback) {
  base::ThreadTaskRunnerHandle::Get()->PostTask(
      FROM_HERE,
      base::BindOnce(callback, !scanner_table_.empty(), scanner_table_));
}

void FakeLorgnetteManagerClient::ScanImageToString(
    std::string device_name,
    const ScanProperties& properties,
    const ScanImageToStringCallback& callback) {
  auto it = scan_data_.find(
      std::make_tuple(device_name, properties.mode, properties.resolution_dpi));
  auto task = it != scan_data_.end()
                  ? base::BindOnce(callback, true, it->second)
                  : base::BindOnce(callback, false, std::string());
  base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(task));
}

void FakeLorgnetteManagerClient::AddScannerTableEntry(
    const std::string device_name,
    const ScannerTableEntry& entry) {
  scanner_table_[device_name] = entry;
}

void FakeLorgnetteManagerClient::AddScanData(const std::string& device_name,
                                             const ScanProperties& properties,
                                             const std::string data) {
  scan_data_[std::make_tuple(device_name, properties.mode,
                             properties.resolution_dpi)] = data;
}

}  // namespace chromeos
