/**
 * پیکربندی مرکزی سرویس.
 * تمام مقادیر حساس فقط از متغیرهای محیطی خوانده می‌شوند و هرگز به Frontend نمی‌روند.
 */
import { fileURLToPath } from 'node:url';
import path from 'node:path';

const here = path.dirname(fileURLToPath(import.meta.url));
export const rootDir = path.resolve(here, '../..');

export const config = {
  env: process.env.NODE_ENV ?? 'development',
  port: Number(process.env.PORT ?? 4000),
  host: process.env.HOST ?? '0.0.0.0',

  /**
   * لایه داده: در محیط توسعه محلی از PGlite (موتور واقعی PostgreSQL کامپایل‌شده به
   * WASM) استفاده می‌شود؛ در محیط Data Center با تنظیم DATABASE_URL همان اسکیما
   * روی PostgreSQL واقعی اجرا می‌شود.
   */
  database: {
    url: process.env.DATABASE_URL ?? '',
    embeddedPath: process.env.PGLITE_PATH ?? path.join(rootDir, '../datacenter/database/pglite'),
  },

  redisUrl: process.env.REDIS_URL ?? '',
  searchUrl: process.env.OPENSEARCH_URL ?? '',

  storage: {
    driver: process.env.STORAGE_DRIVER ?? 'local', // local | minio
    localPath: process.env.STORAGE_PATH ?? path.join(rootDir, '../datacenter/storage/uploads'),
    minio: {
      endpoint: process.env.MINIO_ENDPOINT ?? '',
      accessKey: process.env.MINIO_ACCESS_KEY ?? '',
      secretKey: process.env.MINIO_SECRET_KEY ?? '',
      bucket: process.env.MINIO_BUCKET ?? 'shahrnama',
    },
  },

  security: {
    sessionTtlHours: Number(process.env.SESSION_TTL_HOURS ?? 24 * 7),
    cookieName: 'shahrnama_session',
    csrfCookieName: 'shahrnama_csrf',
    cookieSecure: process.env.COOKIE_SECURE === 'true',
    maxFailedLogins: 8,
    lockMinutes: 15,
    maxUploadBytes: Number(process.env.MAX_UPLOAD_BYTES ?? 25 * 1024 * 1024),
  },

  /** قانون ۱۰ روزه — پنجره ویرایش عادی پس از انتشار خبر */
  editorial: {
    editWindowDays: Number(process.env.ARTICLE_EDIT_WINDOW_DAYS ?? 10),
  },

  communications: {
    telegramBotToken: process.env.TELEGRAM_BOT_TOKEN ?? '',
    eitaaToken: process.env.EITAA_TOKEN ?? '',
  },
} as const;
