/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import * as z from "zod/v3";
import { dlv } from "./dlv.js";

export interface Env {
  MISTRAL_API_KEY?: string | undefined;

  MISTRAL_DEBUG?: boolean | undefined;
}

export const envSchema: z.ZodType<Env, z.ZodTypeDef, unknown> = z.object({
  MISTRAL_API_KEY: z.string().optional(),

  MISTRAL_DEBUG: z.coerce.boolean().optional(),
});

/**
 * Checks for the existence of the Deno global object to determine the environment.
 * @returns {boolean} True if the runtime is Deno, false otherwise.
 */
function isDeno() {
  if ("Deno" in globalThis) {
    return true;
  }

  return false;
}

let envMemo: Env | undefined = undefined;
/**
 * Reads and validates environment variables.
 */
export function env(): Env {
  if (envMemo) {
    return envMemo;
  }

  let envObject: Record<string, unknown> = {};
  if (isDeno()) {
    envObject = (globalThis as any).Deno?.env?.toObject?.() ?? {};
  } else {
    envObject = dlv(globalThis, "process.env") ?? {};
  }

  envMemo = envSchema.parse(envObject);
  return envMemo;
}

/**
 * Clears the cached env object. Useful for testing with a fresh environment.
 */
export function resetEnv() {
  envMemo = undefined;
}
