import type AuthoringInfoClassBreakInfo from "./AuthoringInfoClassBreakInfo.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { AuthoringInfoClassBreakInfoProperties } from "./AuthoringInfoClassBreakInfo.js";

/** @since 5.0 */
export interface AuthoringInfoFieldInfoProperties extends Partial<Pick<AuthoringInfoFieldInfo, "field" | "label" | "normalizationField">> {
  /**
   * Describes the class breaks generated for this field.
   *
   * @since 5.0
   */
  classBreakInfos?: Array<AuthoringInfoClassBreakInfoProperties>;
}

/** @since 5.0 */
export default class AuthoringInfoFieldInfo extends JSONSupport {
  constructor(properties?: AuthoringInfoFieldInfoProperties);
  /**
   * Describes the class breaks generated for this field.
   *
   * @since 5.0
   */
  get classBreakInfos(): Array<AuthoringInfoClassBreakInfo>;
  set classBreakInfos(value: Array<AuthoringInfoClassBreakInfoProperties>);
  /**
   * The name of a numeric field.
   *
   * @default ""
   * @since 5.0
   */
  accessor field: string;
  /**
   * The label used to describe the field or variable in the legend.
   *
   * @default ""
   * @since 5.0
   */
  accessor label: string;
  /**
   * The name of a numeric field used to normalize the given `field`. In choropleth visualizations
   *   it is best practice to normalize your data values if they haven't already been normalized.
   *
   * @default ""
   * @since 5.0
   */
  accessor normalizationField: string;
}