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

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

export default abstract class AuthoringInfoFieldInfo extends JSONSupport {
  /** Describes the class breaks generated for this field. */
  get classBreakInfos(): Array<AuthoringInfoClassBreakInfo>;
  set classBreakInfos(value: Array<AuthoringInfoClassBreakInfoProperties>);
  /**
   * The name of a numeric field.
   *
   * @default ""
   */
  accessor field: string;
  /**
   * The label used to describe the field or variable in the legend.
   *
   * @default ""
   */
  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 ""
   */
  accessor normalizationField: string;
}