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

module arc.mojom;

// android.print.PageRange
struct PrintPageRange {
  // First page inclusive.
  int32 start;
  // Last page inclusive.
  int32 end;
};

// android.print.PrintAttributes.MediaSize
struct PrintMediaSize {
  // Id unique among media sizes.
  string id;
  // Localized label.
  string label;
  int32 width_mils;
  int32 height_mils;
};

// android.print.PrintAttributes.Resolution
struct PrintResolution {
  // Id unique among resolutions.
  string id;
  // Localized label.
  string label;
  int32 horizontal_dpi;
  int32 vertical_dpi;
};

// android.print.PrintAttributes.Margins
struct PrintMargins {
  int32 left_mils;
  int32 top_mils;
  int32 right_mils;
  int32 bottom_mils;
};

// android.print.PrintAttributes.COLOR_MODE_*
[Extensible]
enum PrintColorMode {
  MONOCHROME = 1,
  COLOR = 2,
};

// android.print.PrintAttributes.DUPLEX_MODE_*
[Extensible]
enum PrintDuplexMode {
  NONE = 1,
  LONG_EDGE = 2,
  SHORT_EDGE = 4,
};

// android.print.PrintDocumentInfo.CONTENT_TYPE_*
[Extensible]
enum PrintContentType {
  UNKNOWN = -1,
  DOCUMENT = 0,
  PHOTO = 1,
};

// android.print.PrintAttributes
struct PrintAttributes {
  PrintMediaSize? media_size;
  PrintResolution? resolution;
  PrintMargins? min_margins;
  PrintColorMode color_mode;
  PrintDuplexMode duplex_mode;
};

struct PrintDocumentRequest {
  array<PrintPageRange> pages;
  PrintAttributes attributes;
};

struct PrintJobRequest {
  // android.printservice.PrintJob fields:
  array<int8> id;
  string label;
  string? printer_id;
  int64 creation_time;
  int32 copies;
  array<PrintPageRange> pages;
  PrintAttributes attributes;
  // android.print.PrintDocumentInfo fields:
  string document_name;
  int32 document_page_count;
  PrintContentType content_type;
  int64 data_size;
  // android.printservice.PrintDocument fields:
  handle? data;
};

// android.print.PrinterInfo.STATUS_*
[Extensible]
enum PrinterStatus {
  IDLE = 1,
  BUSY = 2,
  UNAVAILABLE = 3,
};

// android.print.PrinterCapabilitiesInfo
struct PrinterCapabilities {
  array<PrintMediaSize> media_sizes;
  array<PrintResolution> resolutions;
  PrintMargins min_margins;
  PrintColorMode color_modes;
  PrintDuplexMode duplex_modes;
  PrintAttributes defaults;
};

// android.print.PrinterInfo
struct PrinterInfo {
  // Id unique among printers.
  string id;
  // Localized name.
  string name;
  PrinterStatus status;
  // Localized description.
  string? description;
  // Intent for provider-specific settings.
  string? info_intent;
  PrinterCapabilities? capabilities;
};
