import type RelatedRecordsInfoFieldOrder from "./support/RelatedRecordsInfoFieldOrder.js";
import type { JSONSupport } from "../core/JSONSupport.js";
import type { RelatedRecordsInfoFieldOrderProperties } from "./support/RelatedRecordsInfoFieldOrder.js";

export interface RelatedRecordsInfoProperties extends Partial<Pick<RelatedRecordsInfo, "showRelatedRecords">> {
  /**
   * An array of [RelatedRecordsInfoFieldOrder](https://developers.arcgis.com/javascript/latest/references/core/popup/support/RelatedRecordsInfoFieldOrder/)
   * objects indicating the field display order for the related records
   * and whether they should be sorted in ascending `asc` or descending `desc` order.
   */
  orderByFields?: RelatedRecordsInfoFieldOrderProperties[] | null;
}

/**
 * The `RelatedRecordsInfo` class provides additional sorting options
 * when working with related records in a layer's [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/).
 *
 * @since 4.11
 * @see [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/)
 * @see [RelatedRecordsInfoFieldOrder](https://developers.arcgis.com/javascript/latest/references/core/popup/support/RelatedRecordsInfoFieldOrder/)
 * @see [Sample - Multiple popup elements](https://developers.arcgis.com/javascript/latest/sample-code/popup-multipleelements/)
 */
export default class RelatedRecordsInfo extends JSONSupport {
  constructor(properties?: RelatedRecordsInfoProperties);
  /**
   * An array of [RelatedRecordsInfoFieldOrder](https://developers.arcgis.com/javascript/latest/references/core/popup/support/RelatedRecordsInfoFieldOrder/)
   * objects indicating the field display order for the related records
   * and whether they should be sorted in ascending `asc` or descending `desc` order.
   */
  get orderByFields(): RelatedRecordsInfoFieldOrder[] | null | undefined;
  set orderByFields(value: RelatedRecordsInfoFieldOrderProperties[] | null | undefined);
  /** Indicates whether to display related records in the popup. */
  accessor showRelatedRecords: boolean | null | undefined;
  /**
   * Creates a deep clone of the RelatedRecordsInfo class.
   *
   * @returns A deep clone of the RelatedRecordsInfo instance.
   */
  clone(): RelatedRecordsInfo;
}