import { describe, it, expect } from "vitest";
import { merkmalCreateSchema, merkmalUpdateSchema } from "./merkmal";

describe("merkmalCreateSchema", () => {
  const base = {
    name: "Löschwassertank",
    typ: "number" as const,
    geltungsbereich: "vehicle" as const,
    einheit: "l",
  };

  it("akzeptiert ein number-Merkmal ohne Optionen", () => {
    const r = merkmalCreateSchema.safeParse(base);
    expect(r.success).toBe(true);
  });

  it("verlangt mindestens eine Option bei typ=enum", () => {
    const r = merkmalCreateSchema.safeParse({
      name: "Pumpentyp",
      typ: "enum",
      geltungsbereich: "vehicle",
      optionen: [],
    });
    expect(r.success).toBe(false);
  });

  it("akzeptiert enum mit Optionen", () => {
    const r = merkmalCreateSchema.safeParse({
      name: "Pumpentyp",
      typ: "enum",
      geltungsbereich: "vehicle",
      optionen: [{ wert: "fpn_10_1000", label: "FPN 10-1000" }],
    });
    expect(r.success).toBe(true);
  });

  it("lehnt leeren Namen ab", () => {
    const r = merkmalCreateSchema.safeParse({ ...base, name: "" });
    expect(r.success).toBe(false);
  });

  it("lehnt ungültigen Typ ab", () => {
    const r = merkmalCreateSchema.safeParse({ ...base, typ: "datum" });
    expect(r.success).toBe(false);
  });
});

describe("merkmalUpdateSchema", () => {
  it("verlangt eine id", () => {
    const r = merkmalUpdateSchema.safeParse({
      name: "X",
      typ: "text",
      geltungsbereich: "both",
    });
    expect(r.success).toBe(false);
  });

  it("akzeptiert vollständige Update-Daten", () => {
    const r = merkmalUpdateSchema.safeParse({
      id: "11111111-1111-1111-1111-111111111111",
      name: "X",
      typ: "text",
      geltungsbereich: "both",
    });
    expect(r.success).toBe(true);
  });
});
