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

export interface TileMatrixSetProperties extends Partial<Pick<TileMatrixSet, "id">> {
  /** The full extent of the TileMatrixSet. */
  fullExtent?: ExtentProperties | null;
  /** The tiling scheme information for the layer. */
  tileInfo?: TileInfoProperties | null;
}

/**
 * Contains information about the tiling scheme for [WMTSSublayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-WMTSSublayer.html).
 *
 * @since 4.4
 */
export default class TileMatrixSet extends JSONSupport {
  constructor(properties?: TileMatrixSetProperties);
  /** The full extent of the TileMatrixSet. */
  get fullExtent(): Extent | null | undefined;
  set fullExtent(value: ExtentProperties | null | undefined);
  /** The unique ID assigned to the TileMatrixSet. */
  accessor id: string;
  /** The tiling scheme information for the layer. */
  get tileInfo(): TileInfo | null | undefined;
  set tileInfo(value: TileInfoProperties | null | undefined);
  /**
   * Creates a deep clone of this TileMatrixSet.
   *
   * @returns A deep clone of the TileMatrixSet instance that invoked this method.
   */
  clone(): TileMatrixSet;
}