import { describe, it, expect } from "vitest";
import { handleDevCountryConfig, handleDevFarmerPreferences } from "@/lib/dev-api-mock";

describe("Config contract: GET /config/country/{code}", () => {
  it("returns UZ country config with appearance", () => {
    const result = handleDevCountryConfig("UZ");
    expect(result.status).toBe(200);

    const data = result.data as Record<string, unknown>;
    expect(data.countryCode).toBe("UZ");
    expect(data.languages).toEqual(["uz", "ru", "en"]);
    expect(data.consentVersion).toBe("2026.1");
    expect(data.featureFlags).toBeDefined();

    const appearance = data.appearance as Record<string, unknown>;
    expect(appearance.allowedThemes).toEqual(["light", "dark", "system"]);
    expect(appearance.defaultTheme).toBe("system");
    expect(appearance.darkModeEnabled).toBe(true);
  });

  it("returns 404 for unknown country", () => {
    const result = handleDevCountryConfig("XX");
    expect(result.status).toBe(404);
  });

  it("is case-insensitive for country code", () => {
    const result = handleDevCountryConfig("uz");
    expect(result.status).toBe(200);
  });
});

describe("Config contract: PATCH /farmer/preferences", () => {
  it("accepts a valid language", () => {
    const result = handleDevFarmerPreferences("user-test", { primaryLanguage: "ru" });
    expect(result.status).toBe(200);

    const data = result.data as Record<string, unknown>;
    expect(data.primaryLanguage).toBe("ru");
  });

  it("rejects an invalid language", () => {
    const result = handleDevFarmerPreferences("user-test", { primaryLanguage: "fr" });
    expect(result.status).toBe(400);
  });

  it("rejects missing language", () => {
    const result = handleDevFarmerPreferences("user-test", {});
    expect(result.status).toBe(400);
  });
});
