import type FeatureTemplate from "./FeatureTemplate.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { DomainUnion } from "./types.js";
import type { FeatureTemplateProperties } from "./FeatureTemplate.js";

export interface FeatureTypeProperties extends Partial<Pick<FeatureType, "domains" | "id" | "name">> {
  /** Array of [feature templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) associated with the feature type. */
  templates?: FeatureTemplateProperties[];
}

/**
 * FeatureType is a subset of features defined in a [FeatureLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-FeatureLayer.html) that share the same attributes.
 * They are used as a way to categorize your data. For example, the streets in a city streets feature layer could be categorized into three
 * feature types: local streets, collector streets, and arterial streets.
 *
 * @since 4.4
 */
export default class FeatureType extends FeatureTypeSuperclass {
  constructor(properties?: FeatureTypeProperties);
  /**
   * Domains associated with the feature type. It is an object where the name of each property corresponds with the name of a field
   * containing a domain. If a field's domain is an instance of [InheritedDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-InheritedDomain.html), the application
   * will use the domain defined for the field from the layer. If the domain is an instance of
   * [CodedValueDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-CodedValueDomain.html) or [RangeDomain](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-RangeDomain.html) then the domain is defined
   * specifically for the given feature type.
   */
  accessor domains: Record<string, DomainUnion>;
  /** The feature type identifier. */
  accessor id: number | string;
  /** The feature type name. */
  accessor name: string;
  /** Array of [feature templates](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-support-FeatureTemplate.html) associated with the feature type. */
  get templates(): FeatureTemplate[];
  set templates(value: FeatureTemplateProperties[]);
}
declare const FeatureTypeSuperclass: typeof JSONSupport & typeof ClonableMixin