import "dotenv/config";
import { z } from "zod";

const envSchema = z.object({
  NODE_ENV: z.enum(["development", "test", "production"]).default("development"),
  PORT: z.coerce.number().int().positive().default(3001),
  CORS_ORIGIN: z.string().min(1).default("http://localhost:5173"),
  APP_BASE_URL: z.string().url(),
  API_PUBLIC_BASE_URL: z.string().url().optional(),
  AUTH_TOKEN_TTL_MINUTES: z.coerce.number().int().positive().default(60),
  PASSWORD_RESET_TOKEN_TTL_MINUTES: z.coerce.number().int().positive().default(60),
  SUPABASE_URL: z.string().url(),
  SUPABASE_SECRET_KEY: z.string().min(1),
  SUPABASE_ANON_KEY: z.string().min(1),
  EMAIL_PROVIDER: z.enum(["resend", "ses"]).default("resend"),
  RESEND_API_KEY: z.string().optional().default(""),
  RESEND_WEBHOOK_SECRET: z.string().optional().default(""),
  PLATFORM_FROM_EMAIL: z.string().email(),
  PLATFORM_FROM_NAME: z.string().min(1).default("Nextacom"),
  AWS_REGION: z.string().optional().default(""),
  AWS_ACCESS_KEY_ID: z.string().optional().default(""),
  AWS_SECRET_ACCESS_KEY: z.string().optional().default(""),
  AWS_SESSION_TOKEN: z.string().optional().default("")
});

export const env = envSchema.parse(process.env);

export const corsOrigins = env.CORS_ORIGIN.split(",")
  .map((origin) => origin.trim())
  .filter(Boolean);

export const cookieConfig = {
  accessTokenName: "na_access_token",
  refreshTokenName: "na_refresh_token",
  activeOrganizationName: "na_active_org"
} as const;
