import { beforeEach, expect, test } from "vitest";
import * as z from "zod/v4";

// English is the default locale and must register on first ZodType construction even when bundlers tree-shake `sideEffects: false` modules (#5953, #5725). Reset between tests so each one observes the lazy init.
beforeEach(() => {
  z.config({ localeError: undefined });
});

test("first ZodType construction registers the English default locale", () => {
  expect(z.config().localeError).toBeUndefined();
  const schema = z.enum(["km", "mi"]);
  expect(z.config().localeError).toBeDefined();
  const result = schema.safeParse("feet");
  expect(result.success).toBe(false);
  expect(result.error!.issues[0].message).toBe('Invalid option: expected one of "km"|"mi"');
});

test("explicit locale set before schema construction is preserved", () => {
  z.config(z.locales.fr());
  const schema = z.enum(["km", "mi"]);
  const result = schema.safeParse("feet");
  expect(result.success).toBe(false);
  expect(result.error!.issues[0].message).toBe('Option invalide : une valeur parmi "km"|"mi" attendue');
});

test("explicit locale set after schema construction overrides default", () => {
  const schema = z.enum(["km", "mi"]);
  z.config(z.locales.fr());
  const result = schema.safeParse("feet");
  expect(result.success).toBe(false);
  expect(result.error!.issues[0].message).toBe('Option invalide : une valeur parmi "km"|"mi" attendue');
});
