export type MerkmalTyp = "number" | "enum" | "boolean" | "text";
export type EntityTyp = "vehicle" | "equipment";
export type AssetStatus = "einsatzbereit" | "wartung" | "ausser_dienst";

/** Eine aus dem aktiven Merkmal-Katalog abgeleitete Facette für das Filter-UI. */
export interface FacetDef {
  merkmalId: string;
  name: string;
  typ: MerkmalTyp;
  einheit: string | null;
  /** Nur bei `typ === "number"`: beobachtetes Minimum/Maximum aus merkmal_values. */
  min?: number;
  max?: number;
  /** Nur bei `typ === "enum"`: vorhandene Optionen, sortiert. */
  optionen?: { wert: string; label: string }[];
}

/** Ein einzelner aktiver Filter. Diskriminiert über `typ`. */
export type FilterValue =
  | { typ: "number"; merkmalId: string; gte?: number; lte?: number }
  | { typ: "enum"; merkmalId: string; in: string[] }
  | { typ: "boolean"; merkmalId: string; eq: boolean };

/** Geparste, typisierte Suchparameter (aus searchParams). */
export interface SearchParams {
  q?: string;
  nurEinsatzbereit: boolean;
  filter: FilterValue[];
}

/**
 * Ein UNGEORDNETER Suchtreffer. Die ETA-Sortierung passiert im Geo-Workstream
 * über `searchHitsToGeoCandidates` + `orderByEintreffzeit`. IDs sind uuid
 * (string), durchgängig.
 */
export interface SearchHit {
  entityTyp: EntityTyp;
  entityId: string;
  brigadeId: string;
  name: string;
  funkrufname: string | null;
  status: AssetStatus;
}

/** Ein Wehr-Treffer (Tab "Wehren"). */
export interface BrigadeHit {
  brigadeId: string;
  name: string;
  ort: string | null;
  plz: string | null;
}
