/* tslint:disable */
/**
 * This file was automatically generated by json-schema-to-typescript.
 * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
 * and run json-schema-to-typescript to regenerate this file.
 */

/**
 * Presets define how map entities are displayed to the user. They define the icon used on the map, and the fields / questions shown to the user when they create or edit the entity on the map. The `tags` property of a preset is used to match the preset with observations, nodes, ways and relations. If multiple presets match, the one that matches the most tags is used.
 */
export interface Preset {
  /**
   * Version of schema. Should increment for breaking changes to the schema
   */
  schemaVersion?: 1;
  /**
   * Unique value that identifies this element
   */
  id: string;
  /**
   * Name for the feature in default language.
   */
  name: string;
  /**
   * Valid geometry types for the feature - this preset will only match features of this geometry type `"point", "vertex", "line", "area", "relation"`
   *
   * @minItems 1
   */
  geometry: [
    "point" | "vertex" | "line" | "area" | "relation",
    ...("point" | "vertex" | "line" | "area" | "relation")[]
  ];
  /**
   * The tags are used to match the preset to existing map entities. You can match based on multiple tags E.g. if you have existing points with the tags `nature:tree` and `species:oak` then you can add both these tags here in order to match only oak trees.
   */
  tags: {
    [k: string]: unknown;
  };
  /**
   * Tags that are added when changing to the preset (default is the same value as 'tags')
   */
  addTags?: {
    [k: string]: unknown;
  };
  /**
   * Tags that are removed when changing to another preset (default is the same value as 'addTags' which in turn defaults to 'tags')
   */
  removeTags?: {
    [k: string]: unknown;
  };
  /**
   * IDs of fields to displayed to the user when the preset is created or edited
   */
  fields?: string[];
  /**
   * Additional fields to display (used internally by Mapeo Desktop, no need to define this in preset)
   */
  additionalFields?: string[];
  /**
   * ID of preset icon which represents this preset
   */
  icon?: string;
  /**
   * Synonyms or related terms (used for search)
   */
  terms?: string[];
  /**
   * When presets are displayed as a list, defines the order it should be sorted. Presets with lowest sort numbers are displayed first
   */
  sort?: number;
}
