// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_PRINTING_PRINT_TEST_UTILS_H_
#define CHROME_BROWSER_PRINTING_PRINT_TEST_UTILS_H_

#include <memory>
#include <string>
#include <vector>

#include "base/values.h"
#include "chrome/browser/ui/webui/print_preview/print_preview_handler.h"
#include "printing/backend/print_backend.h"
#include "printing/print_settings.h"
#include "ui/gfx/geometry/size.h"

namespace printing {

namespace mojom {
enum class PrinterType;
}

namespace test {

extern const char kPrinterName[];
constexpr int kPrinterDpi = 600;

// Some common paper sizes that can be used for fake device configurations.
extern const PrinterSemanticCapsAndDefaults::Paper kPaperLetter;
extern const PrinterSemanticCapsAndDefaults::Paper kPaperLegal;

// Support values for `MakeDefaultPrintSettings()`.
constexpr int kPrinterDefaultRenderDpi = 72;
constexpr gfx::Size kPrinterCapabilitiesDpi(kPrinterDefaultRenderDpi,
                                            kPrinterDefaultRenderDpi);
constexpr int kPrintSettingsCopies = 42;
extern const std::vector<gfx::Size> kPrinterCapabilitiesDefaultDpis;
extern const PrinterBasicInfoOptions kPrintInfoOptions;

// Creates a print ticket with some default values. Based on ticket creation in
// chrome/browser/resources/print_preview/native_layer.js.
base::Value::Dict GetPrintTicket(mojom::PrinterType type);

// Make some settings which correspond to the defaults for the indicated
// printer.
std::unique_ptr<PrintSettings> MakeDefaultPrintSettings(
    const std::string& printer_name);

// Make some settings which are different than the generated defaults of
// `MakeDefaultPrintSettings()`, to be used if test calls
// `PrintingContext::AskUserForSettings()`.
std::unique_ptr<PrintSettings> MakeUserModifiedPrintSettings(
    const std::string& printer_name);

// Simpler version of StartPrint() provided for convenience with the common
// defaults:
// - null `print_renderer`
// - `print_preview_disabled` set to false
// - `has_selection` set to false
void StartPrint(content::WebContents* web_contents);

}  // namespace test
}  // namespace printing

#endif  // CHROME_BROWSER_PRINTING_PRINT_TEST_UTILS_H_
