import type Accessor from "../../core/Accessor.js";
import type SpatialReference from "../../geometry/SpatialReference.js";
import type PrintTemplate from "./PrintTemplate.js";
import type MapView from "../../views/MapView.js";
import type { SpatialReferenceProperties } from "../../geometry/SpatialReference.js";

export interface PrintParametersProperties extends Partial<Pick<PrintParameters, "extraParameters" | "template" | "view">> {
  /** Specify the output spatial reference for the printout. */
  outSpatialReference?: SpatialReferenceProperties | null;
}

/**
 * Input parameters for [print](https://developers.arcgis.com/javascript/latest/references/core/rest/print/).
 *
 * @since 4.20
 */
export default class PrintParameters extends Accessor {
  constructor(properties?: PrintParametersProperties);
  /**
   * Additional parameters for the print service. When an arcpy script is published as a custom
   * print service there may be additional parameters associated with the print service.
   * To determine the extra parameters visit the ArcGIS REST Services Directory page for the print service.
   */
  accessor extraParameters: any;
  /** Specify the output spatial reference for the printout. */
  get outSpatialReference(): SpatialReference | null | undefined;
  set outSpatialReference(value: SpatialReferenceProperties | null | undefined);
  /** Defines the layout template used for the printed map. */
  accessor template: PrintTemplate;
  /** The view to print. */
  accessor view: MapView;
}