import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"

/**
 * Tests for `lib/env.ts` re-exports (KAR-522 QW1).
 *
 * `env.ts` is a thin compat-layer over `env-schema.ts`. We verify it carries
 * the validated APP_ENV through and toggles isDev/isStaging/isProd correctly.
 */
describe("env compat-layer (KAR-522 QW1)", () => {
  const originalEnv = { ...process.env }

  beforeEach(() => {
    vi.resetModules()
    process.env.NEXT_PUBLIC_SUPABASE_URL = "https://example.supabase.co"
    process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY = "x".repeat(40)
    process.env.SUPABASE_SERVICE_ROLE_KEY = "y".repeat(40)
  })

  afterEach(() => {
    for (const key of Object.keys(process.env)) delete process.env[key]
    Object.assign(process.env, originalEnv)
  })

  it("flags development by default", async () => {
    process.env.NEXT_PUBLIC_APP_ENV = "development"
    const mod = await import("../env")
    expect(mod.APP_ENV).toBe("development")
    expect(mod.isDev).toBe(true)
    expect(mod.isStaging).toBe(false)
    expect(mod.isProd).toBe(false)
  })

  it("flags staging when NEXT_PUBLIC_APP_ENV=staging", async () => {
    process.env.NEXT_PUBLIC_APP_ENV = "staging"
    const mod = await import("../env")
    expect(mod.APP_ENV).toBe("staging")
    expect(mod.isStaging).toBe(true)
    expect(mod.isDev).toBe(false)
    expect(mod.isProd).toBe(false)
  })

  it("flags production when NEXT_PUBLIC_APP_ENV=production", async () => {
    process.env.NEXT_PUBLIC_APP_ENV = "production"
    const mod = await import("../env")
    expect(mod.APP_ENV).toBe("production")
    expect(mod.isProd).toBe(true)
    expect(mod.isDev).toBe(false)
    expect(mod.isStaging).toBe(false)
  })
})
