/**
 * Geteilte Typen für den typisierten Merkmal-Wert-Editor (Workstream 7).
 *
 * REIN: keine DB-/IO-Abhängigkeit, damit Validierung und Editor ohne laufendes
 * Postgres testbar sind. Die DB-Schreibseite (`upsertMerkmalValues`) konsumiert
 * `MerkmalValueInput`.
 */

import type { merkmalTypEnum } from "@/db/schema";

/** Fachlicher Merkmal-Typ (Single Source of Truth: DB-Enum `merkmal_typ`). */
export type MerkmalTyp = (typeof merkmalTypEnum.enumValues)[number];

/** Eine Auswahloption eines `enum`-Merkmals. */
export interface MerkmalOption {
  wert: string;
  label: string;
}

/**
 * Ein zur Bearbeitung angebotenes Merkmal (aus Vorlage oder Kategorie
 * aufgelöst). `pflicht` markiert Vorlagen-Pflichtfelder. `vorgabe*` sind die
 * typgerecht vorbefüllten Standardwerte (drei Spalten, exakt einer passt zum
 * `typ`).
 */
export interface MerkmalDefinition {
  merkmalId: string;
  name: string;
  typ: MerkmalTyp;
  einheit: string | null;
  pflicht: boolean;
  reihenfolge: number;
  optionen: MerkmalOption[];
  vorgabeNum: number | null;
  vorgabeText: string | null;
  vorgabeBool: boolean | null;
}

/**
 * Ein einzelner, an der Server-Grenze validierter Merkmal-Wert. Genau eine der
 * Wertspalten ist (typabhängig) gesetzt; alle `null`/leer => der Wert wird
 * beim Upsert gelöscht (kein Eintrag).
 */
export interface MerkmalValueInput {
  merkmalId: string;
  num?: number | null;
  text?: string | null;
  bool?: boolean | null;
}
