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(8080),
  APP_BASE_URL: z.string().url().default('https://license.getstacklogic.com'),
  COOKIE_SECURE: z.coerce.boolean().optional(),
  DATABASE_URL: z.string().min(1),
  STRIPE_SECRET_KEY: z.string().min(1),
  STRIPE_WEBHOOK_SECRET: z.string().min(1),
  STACKLOGIC_PRODUCT_ID: z.string().min(1),
  STACKLOGIC_PRICE_ID: z.string().min(1),
  STACKLOGIC_LICENSE_PRIVATE_KEY: z.string().min(1),
  EMAIL_PROVIDER: z.enum(['postmark', 'resend', 'smtp', 'log']).default('log'),
  POSTMARK_SERVER_TOKEN: z.string().optional(),
  RESEND_API_KEY: z.string().optional(),
  SMTP_HOST: z.string().optional(),
  SMTP_PORT: z.coerce.number().int().positive().optional(),
  SMTP_SECURE: z.coerce.boolean().default(false),
  SMTP_USER: z.string().optional(),
  SMTP_PASSWORD: z.string().optional(),
  EMAIL_FROM: z.string().min(1).default('StackLogic <support@getstacklogic.com>'),
  SUPPORT_EMAIL: z.string().email().default('support@getstacklogic.com'),
  STACKLOGIC_DOWNLOAD_URL: z.string().url().default('https://getstacklogic.com/download'),
  ADMIN_SESSION_SECRET: z.string().min(32),
  ADMIN_SESSION_DAYS: z.coerce.number().int().positive().default(7),
  LOGIN_RATE_LIMIT_WINDOW_MS: z.coerce.number().int().positive().default(900000),
  LOGIN_RATE_LIMIT_MAX: z.coerce.number().int().positive().default(8),
  ADMIN_INITIAL_EMAIL: z.string().email().optional(),
  ADMIN_INITIAL_PASSWORD: z.string().optional(),
  ADMIN_INITIAL_NAME: z.string().optional(),
})

export const config = envSchema.parse(process.env)
export const isProduction = config.NODE_ENV === 'production'
export const cookieSecure = config.COOKIE_SECURE ?? isProduction

export const productName = 'StackLogic Professional'
export const licenseProductName = 'StackLogic Professional'
