// Copyright 2017 The Chromium OS 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 "ippusb_manager/usb.h"

#include <memory>
#include <string>

#include <base/logging.h>
#include <base/strings/string_number_conversions.h>
#include <base/strings/string_split.h>
#include <base/strings/string_util.h>
#include <libusb.h>

namespace ippusb_manager {

bool GetUsbInfo(const std::string& info, uint16_t* vid, uint16_t* pid) {
  auto tokens = base::SplitString(info, "_", base::KEEP_WHITESPACE,
                                  base::SPLIT_WANT_ALL);
  if (tokens.size() != 2)
    return false;

  int v, p;
  if (!base::HexStringToInt(tokens[0], &v) ||
      !base::HexStringToInt(tokens[1], &p))
    return false;

  *vid = v;
  *pid = p;

  return true;
}

UsbPrinterInfo::UsbPrinterInfo(uint16_t vid, uint16_t pid)
    : vid_(vid), pid_(pid) {}

bool UsbPrinterInfo::FindDeviceLocation() {
  libusb_device_handle* handle =
      libusb_open_device_with_vid_pid(nullptr, vid_, pid_);

  if (handle) {
    libusb_device* device = libusb_get_device(handle);
    set_bus(libusb_get_bus_number(device));
    set_device(libusb_get_device_address(device));
    libusb_close(handle);
    return true;
  }

  return false;
}

std::unique_ptr<UsbPrinterInfo> UsbPrinterInfo::Create(uint16_t vid,
                                                       uint16_t pid) {
  return std::unique_ptr<UsbPrinterInfo>(new UsbPrinterInfo(vid, pid));
}

}  // namespace ippusb_manager
