// Copyright 2019 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/printing/epson_driver_matching.h"

#include <algorithm>

#include "chromeos/printing/ppd_provider.h"

namespace chromeos {

bool CanUseEpsonGenericPPD(const PrinterSearchData& sd) {
  // Needed to check if its an Epson printer.
  if (sd.make_and_model.empty()) {
    return false;
  }

  // Fail if this isn't an Epson printer.
  // Note: Assumes make and model strings are already lowercase.
  auto it = std::find_if(sd.make_and_model.begin(), sd.make_and_model.end(),
                         [](base::StringPiece emm) {
                           return emm.find("epson") != base::StringPiece::npos;
                         });
  if (it == sd.make_and_model.end()) {
    return false;
  }

  switch (sd.discovery_type) {
    case PrinterSearchData::PrinterDiscoveryType::kManual:
      // For manually discovered printers, supported_document_formats is
      // retrieved via an ippGetAttributes query to the printer.
      return base::ContainsValue(sd.supported_document_formats,
                                 "application/octet-stream");

    case PrinterSearchData::PrinterDiscoveryType::kUsb:
      return base::ContainsValue(sd.usb_command_set, "ESC/P-R");

    case PrinterSearchData::PrinterDiscoveryType::kZeroconf:
      // For printers found through mDNS/DNS-SD discovery,
      // supported_document_formats is retrieved via the Printer Description TXT
      // Record(from the key 'pdl').
      return base::ContainsValue(sd.supported_document_formats,
                                 "application/vnd.epson.escpr");

    default:
      return false;
  }
}

}  // namespace chromeos
