import type { ClonableMixin } from "../core/Clonable.js";
import type { JSONSupport } from "../core/JSONSupport.js";
import type { IdealEdgeLengthType } from "./types.js";

export interface OrganicLayoutSettingsProperties extends Partial<Pick<OrganicLayoutSettings, "absoluteIdealEdgeLength" | "autoRepulsionRadius" | "computationBudgetTime" | "idealEdgeLengthType" | "multiplicativeIdealEdgeLength" | "repulsionRadiusMultiplier">> {}

/**
 * Settings for organic layout calculations.
 *
 * @since 4.32
 * @see [Web Map Specification | Link chart organic layout settings](https://developers.arcgis.com/web-map-specification/objects/linkChartOrganicLayoutSettings/)
 */
export default class OrganicLayoutSettings extends OrganicLayoutSettingsSuperclass {
  constructor(properties?: OrganicLayoutSettingsProperties);
  /**
   * The value, in degrees, to use for the ideal edge length during layout calculations when the [idealEdgeLengthType](https://developers.arcgis.com/javascript/latest/api-reference/esri-linkChart-OrganicLayoutSettings.html#idealEdgeLengthType) is `absolute-value`.
   * Only used for geographic layouts.
   *
   * @default 1
   */
  accessor absoluteIdealEdgeLength: number;
  /**
   * Determines whether the repulsion radius should be calculated automatically (`true`), or computed according to `repulsionRadiusMultiplier` (`false`).
   *
   * @default true
   */
  accessor autoRepulsionRadius: boolean;
  /**
   * The maximum amount of time in seconds to spend on the layout calculation.
   *
   * @default 2
   */
  accessor computationBudgetTime: number | null | undefined;
  /**
   * Determines which property to use to compute the ideal edge length. Only used for geographic layouts.
   * When the value is `absolute-value`, the `absoluteIdealEdgeLength` property is used.
   * When the value is `multiplier`, the `multiplicativeIdealEdgeLength` property is used.
   *
   * @default "multiplier"
   */
  idealEdgeLengthType: IdealEdgeLengthType;
  /**
   * Value used to multiply the default edge length to determine the ideal edge length during layout calculations, when the [idealEdgeLengthType](https://developers.arcgis.com/javascript/latest/api-reference/esri-linkChart-OrganicLayoutSettings.html#idealEdgeLengthType) is `multiplier`.
   * Only used for geographic layouts.
   *
   * @default 1
   */
  accessor multiplicativeIdealEdgeLength: number;
  /**
   * Value to be used for the repulsion radius multiplier in organic layout calculations.
   * The repulsion radius is calculated by multiplying the repulsionRadiusMultiplier by the actual ideal edge length.
   *
   * @default 1
   */
  accessor repulsionRadiusMultiplier: number | null | undefined;
}
declare const OrganicLayoutSettingsSuperclass: typeof JSONSupport & typeof ClonableMixin