import type { JSONSupport } from "../../core/JSONSupport.js";
import type { CustomTextElement, MapSurroundInfo } from "./types.js";
import type { MapSurroundInfoGroupElementProperties } from "./MapSurroundInfoGroupElement.js";
import type { MapSurroundInfoLegendProperties } from "./MapSurroundInfoLegend.js";
import type { MapSurroundInfoScaleLineProperties } from "./MapSurroundInfoScaleLine.js";
import type { MapSurroundInfoNorthArrowProperties } from "./MapSurroundInfoNorthArrow.js";

export interface LayoutOptionsProperties extends Partial<Pick<LayoutOptions, "customTextElements" | "hasAuthorText" | "hasCopyrightText" | "hasLegend" | "hasTitleText">> {
  /** The MapSurroundInfos in layoutOptions. */
  mapSurroundInfos?: (MapSurroundInfoNorthArrowProperties | MapSurroundInfoScaleLineProperties | MapSurroundInfoLegendProperties | MapSurroundInfoGroupElementProperties)[];
}

/** The `LayoutOptions` class defines layout options for printing */
export default class LayoutOptions extends JSONSupport {
  constructor(properties?: LayoutOptionsProperties);
  /** The CustomTextElements in layoutOptions. */
  accessor customTextElements: CustomTextElement[];
  /** Author text in layoutOptions. */
  accessor hasAuthorText: boolean;
  /** Copyright text in layoutOptions. */
  accessor hasCopyrightText: boolean;
  /** Legend in layoutOptions. */
  accessor hasLegend: boolean;
  /** Title text in layoutOptions. */
  accessor hasTitleText: boolean;
  /** The MapSurroundInfos in layoutOptions. */
  get mapSurroundInfos(): MapSurroundInfo[];
  set mapSurroundInfos(value: (MapSurroundInfoNorthArrowProperties | MapSurroundInfoScaleLineProperties | MapSurroundInfoLegendProperties | MapSurroundInfoGroupElementProperties)[]);
}