import type GraphObjectType from "./GraphObjectType.js";
import type { GraphObjectTypeProperties } from "./GraphObjectType.js";

export interface EntityTypeProperties extends GraphObjectTypeProperties {}

/**
 * An entity type defines a homogeneous collection of [entities](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-knowledgeGraph-Entity.html) with a common set of properties and a spatial feature type.
 * For example, an entity type defining vehicles could define properties including model and license plate, and an optional geometry.
 * Multiple instances of an entity type can be added to a [knowledge graph](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-knowledgeGraph-KnowledgeGraph.html). For example, to describe a family,
 * multiple instances of the person entity type can be defined, along with multiple instances of vehicles and buildings with which the family is associated.
 *
 * @since 4.25
 * @see [Entity](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-knowledgeGraph-Entity.html)
 * @see [RelationshipType](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-knowledgeGraph-RelationshipType.html)
 * @example
 * //sample structure of an entity type
 * {
 *  "declaredClass": "esri.rest.knowledgeGraph.EntityType",
 *  "name": "company",
 *  "alias": "Company",
 *  "role": "Regular",
 *  "strict": false,
 *  "properties": [
 *    {
 *      "declaredClass": "esri.rest.knowledgeGraph.GraphProperty",
 *      "name": "Name",
 *      "alias": "Name",
 *      "fieldType": "esriFieldTypeString",
 *      "geometryType": "esriGeometryNull",
 *      "hasM": false,
 *      "hasZ": false,
 *      "nullable": true,
 *      "editable": true,
 *      "required": false,
 *      "defaultVisibility": true,
 *      "systemMaintained": false,
 *      "role": "esriGraphPropertyRegular",
 *      "defaultValue": null
 *    },
 *    {
 *      "declaredClass": "esri.rest.knowledgeGraph.GraphProperty",
 *      "name": "id",
 *      "alias": "ID",
 *      "fieldType": "esriFieldTypeOID",
 *      "geometryType": "esriGeometryNull",
 *      "hasM": false,
 *      "hasZ": false,
 *      "nullable": false,
 *      "editable": false,
 *      "required": true,
 *      "defaultVisibility": true,
 *      "systemMaintained": true,
 *      "role": "esriGraphPropertyRegular",
 *      "defaultValue": null
 *    }
 *  ],
 *  "fieldIndexes": [
 *    {
 *      "declaredClass": "esri.rest.knowledgeGraph.FieldIndex",
 *      "name": "esri__id_idx",
 *      "unique": true,
 *      "ascending": true,
 *      "description": "",
 *      "fieldNames": [
 *        "id"
 *      ]
 *    },
 *    {
 *      "declaredClass": "esri.rest.knowledgeGraph.FieldIndex",
 *      "name": "esri__name_idx",
 *      "unique": true,
 *      "ascending": true,
 *      "description": "",
 *      "fieldNames": [
 *        "name"
 *      ]
 *    }
 *  ]
 * }
 */
export default class EntityType extends GraphObjectType {
  constructor(properties?: EntityTypeProperties);
}