import type Extent from "../../geometry/Extent.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { ExtentProperties } from "../../geometry/Extent.js";

export interface MapImageProperties extends Partial<Pick<MapImage, "height" | "href" | "opacity" | "scale" | "visible" | "width">> {
  /** The extent of the exported map. */
  extent?: ExtentProperties | null;
}

/**
 * Represents the data object for the dynamically generated map. This is generated after the promise returned from
 * the export operation on {[JobInfo.fetchResultImage()](https://developers.arcgis.com/javascript/latest/references/core/rest/support/JobInfo/#fetchResultImage)
 * resolves.
 *
 * @since 4.0
 * @see [JobInfo.fetchResultImage()](https://developers.arcgis.com/javascript/latest/references/core/rest/support/JobInfo/#fetchResultImage)
 */
export default class MapImage extends JSONSupport {
  constructor(properties?: MapImageProperties);
  /** The extent of the exported map. */
  get extent(): Extent | null | undefined;
  set extent(value: ExtentProperties | null | undefined);
  /** The requested image height in pixels. */
  accessor height: number | null | undefined;
  /** URL to the returned image. The image format must be of a type supported by the HTML `<img>` tag. */
  accessor href: string | null | undefined;
  /**
   * The opacity of the image. Value can be any number between `0` and `1` where `0`
   * is 100% transparent, `0.5` is 50% transparent and `1` is fully opaque.
   *
   * @default 1
   */
  accessor opacity: number;
  /** Scale of the requested dynamic map. */
  accessor scale: number | null | undefined;
  /**
   * Indicates if the requested image is visible in the view.
   *
   * @default true
   */
  accessor visible: boolean;
  /** The requested image width in pixels. */
  accessor width: number | null | undefined;
}