import {
  pgTable,
  uuid,
  text,
  boolean,
  doublePrecision,
  index,
} from "drizzle-orm/pg-core";
import { merkmale } from "./merkmale";
import { entityTypEnum } from "./enums";

/**
 * EAV-Wert-Tabelle mit typisierten Spalten. `entityId` ist polymorph
 * (vehicles.id ODER equipment.id, je nach entityTyp). Die vier geforderten
 * Indizes ermöglichen Range-/Bool-/Text-Filter je Merkmal sowie Entity-Lookup.
 */
export const merkmalValues = pgTable(
  "merkmal_values",
  {
    id: uuid("id").primaryKey().defaultRandom(),
    merkmalId: uuid("merkmal_id")
      .notNull()
      .references(() => merkmale.id, { onDelete: "cascade" }),
    entityTyp: entityTypEnum("entity_typ").notNull(),
    entityId: uuid("entity_id").notNull(),
    valueNum: doublePrecision("value_num"),
    valueText: text("value_text"),
    valueBool: boolean("value_bool"),
  },
  (t) => ({
    idxNum: index("mv_merkmal_num_idx").on(t.merkmalId, t.valueNum),
    idxBool: index("mv_merkmal_bool_idx").on(t.merkmalId, t.valueBool),
    idxText: index("mv_merkmal_text_idx").on(t.merkmalId, t.valueText),
    idxEntity: index("mv_entity_idx").on(t.entityTyp, t.entityId),
  }),
);
