import { z } from "zod";

const envSchema = z.object({
  DATABASE_URL: z.string().min(1, "DATABASE_URL is required"),
  JWT_SECRET: z.string().min(32, "JWT_SECRET must be at least 32 characters"),
  APP_URL: z.string().url("APP_URL must be a valid URL"),
  CREDENTIAL_ENCRYPTION_KEY: z.string().min(32, "CREDENTIAL_ENCRYPTION_KEY is required"),
  REQUEST_SIGNATURE_MAX_AGE_SECONDS: z.coerce.number().int().positive().default(300),
  WOO_SSO_START_URL: z.string().url().optional(),
  WOO_SSO_SHARED_SECRET: z.string().min(32).optional(),
  LICENSE_SYNC_SECRET: z.string().min(32).optional(),
});

export type AppEnv = z.infer<typeof envSchema>;

export function parseEnv(env: Record<string, string | undefined> = process.env): AppEnv {
  return envSchema.parse(env);
}

let cachedEnv: AppEnv | undefined;

export function getEnv(): AppEnv {
  cachedEnv ??= parseEnv();
  return cachedEnv;
}
