import { describe, it, expect } from "vitest";
import { envSchema } from "./env";

describe("envSchema", () => {
  it("should allow missing MAIL_HOST in development", () => {
    const result = envSchema.safeParse({
      NEXT_PUBLIC_BASE_URL: "http://localhost:3000",
      TARGET: "development",
    });
    expect(result.success).toBe(true);
  });

  it("should require MAIL_HOST in production", () => {
    const result = envSchema.safeParse({
      NEXT_PUBLIC_BASE_URL: "https://example.com",
      TARGET: "production",
    });
    expect(result.success).toBe(false);
    if (!result.success) {
      expect(result.error.issues[0].message).toBe(
        "MAIL_HOST is required in non-development environments",
      );
    }
  });

  it("should require MAIL_HOST in testing", () => {
    const result = envSchema.safeParse({
      NEXT_PUBLIC_BASE_URL: "https://testing.example.com",
      TARGET: "testing",
    });
    expect(result.success).toBe(false);
    if (!result.success) {
      expect(result.error.issues[0].message).toBe(
        "MAIL_HOST is required in non-development environments",
      );
    }
  });

  it("should require MAIL_HOST in staging", () => {
    const result = envSchema.safeParse({
      NEXT_PUBLIC_BASE_URL: "https://staging.example.com",
      TARGET: "staging",
    });
    expect(result.success).toBe(false);
    if (!result.success) {
      expect(result.error.issues[0].message).toBe(
        "MAIL_HOST is required in non-development environments",
      );
    }
  });

  it("should pass if MAIL_HOST is provided in production", () => {
    const result = envSchema.safeParse({
      NEXT_PUBLIC_BASE_URL: "https://example.com",
      TARGET: "production",
      MAIL_HOST: "smtp.example.com",
    });
    expect(result.success).toBe(true);
  });

  it("should skip MAIL_HOST requirement if SKIP_RUNTIME_ENV_VALIDATION is true", () => {
    process.env.SKIP_RUNTIME_ENV_VALIDATION = "true";
    const result = envSchema.safeParse({
      NEXT_PUBLIC_BASE_URL: "https://example.com",
      TARGET: "production",
    });
    expect(result.success).toBe(true);
    delete process.env.SKIP_RUNTIME_ENV_VALIDATION;
  });
});
