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

dotenv.config();

const envSchema = z.object({
  NODE_ENV: z.enum(["development", "test", "production"]).default("development"),
  API_PORT: z.coerce.number().default(4000),
  TCP_PORT: z.coerce.number().default(5001),
  DATABASE_URL: z.string().min(1),
  REDIS_URL: z.string().min(1).optional(),
  JWT_SECRET: z.string().min(16),
  JWT_EXPIRES_IN: z.string().default("12h"),
  ADMIN_EMAIL: z.string().email(),
  ADMIN_PASSWORD: z.string().min(8),
  APP_BASE_URL: z.string().default("http://localhost:3000"),
  API_BASE_URL: z.string().default("http://localhost:4000"),
  WS_BASE_URL: z.string().default("http://localhost:4000"),
  TCP_IDLE_TIMEOUT_MS: z.coerce.number().default(180000),
  LOG_TCP_FRAMES: z.coerce.boolean().default(false),
  LOG_TCP_FRAMES_FILE: z.string().default("/opt/tracker/tcp-frames.log"),
  DEVICE_ONLINE_SECONDS: z.coerce.number().default(90),
  DEVICE_DELAYED_SECONDS: z.coerce.number().default(300),
  SMTP_HOST: z.string().min(1).optional(),
  SMTP_PORT: z.coerce.number().default(587),
  SMTP_SECURE: z.coerce.boolean().default(false),
  SMTP_USER: z.string().min(1).optional(),
  SMTP_PASSWORD: z.string().min(1).optional(),
  SMTP_FROM: z.string().email().optional(),
  TEST_MAIL_RECIPIENT: z.string().email().default("pr@visau.pl"),
});

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