# Server runtime configuration
#
# HTTP server, session, CORS, static files, directory layout, application
# metadata, logging, Redis, routing analytics, and response cache.
#
# Sensitive values use '${ENV_VAR}' tokens — resolved by the Rust config
# loader after deserialization. Set real values in .env (never commit them).

let C = import "server/contracts.ncl" in

{
  server = {
    protocol    = "http",
    host        = "0.0.0.0",
    port        = 3030,
    environment = "production",
    log_level   = "info",
  } | C.ServerConfig,

  session = {
    secret           = "${SESSION_SECRET}",
    cookie_name      = "session_id",
    cookie_secure    = false,
    cookie_http_only = true,
    cookie_same_site = "lax",
    max_age          = 3600,
  } | C.SessionConfig,

  cors = {
    allowed_origins   = ["http://localhost:3030", "http://127.0.0.1:3030"],
    allowed_methods   = ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allowed_headers   = ["Content-Type", "Authorization", "X-Requested-With"],
    allow_credentials = true,
    max_age           = 3600,
  } | C.CorsConfig,

  # Quoted key required — 'static' is a Nickel keyword.
  "static" = {
    assets_dir   = "site/public",
    site_root    = "site",
    site_pkg_dir = "pkg",
  } | C.StaticFilesConfig,

  server_dirs = {
    public_dir  = "site/public",
    uploads_dir = "uploads",
    logs_dir    = "works-pv/logs",
    temp_dir    = "works-pv/tmp",
    cache_dir   = "works-pv/cache",
    config_dir  = "config",
    data_dir    = "works-pv/data",
    backup_dir  = "backups",
  } | C.ServerDirConfig,

  app = {
    name                = "Website",
    version             = "0.1.0",
    debug               = true,
    enable_metrics      = false,
    enable_health_check = true,
    enable_compression  = true,
    max_request_size    = 10485760,
    admin_email         = "admin@example.com",
  } | C.AppConfig,

  logging = {
    format         = "pretty",
    level          = "debug",
    file_path      = "works-pv/logs/app.log",
    max_file_size  = 10485760,
    max_files      = 5,
    enable_console = true,
    enable_file    = true,
  } | C.LoggingConfig,

  redis = {
    enabled            = false,
    url                = "redis://localhost:6379",
    pool_size          = 10,
    connection_timeout = 5,
    command_timeout    = 5,
  } | C.RedisConfig,

  routing = {
    enable_tracking              = true,
    tracking_log_path            = "works-pv/logs/navigation.jsonl",
    max_events_in_memory         = 1000,
    slow_resolution_threshold_ms = 10,
    enable_console_debug         = true,
    cache_max_entries            = 1000,
    cache_ttl_seconds            = 3600,
  } | C.RoutingConfig,

  cache = {
    persistent_enabled          = false,
    memory_enabled              = true,
    memory_max_size             = 104857600,
    memory_ttl                  = 3600,
    persistent_ttl              = 86400,
    persistent_max_size         = 1073741824,
    persistent_cleanup_interval = 3600,
  } | C.CacheConfig,
}
