# Runtime feature flags
#
# These flags control behaviour at runtime and are distinct from Cargo
# features (compile-time). Toggling them here takes effect on the next
# server restart without recompiling.

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

{
  features = {
    auth = {
      enabled            = true,
      jwt                = true,
      oauth              = false,
      two_factor         = false,
      sessions           = true,
      password_reset     = true,
      email_verification = false,
    } | C.AuthFeatures,

    rbac = {
      enabled                  = false,
      database_access          = false,
      file_access              = false,
      content_access           = false,
      api_access               = false,
      categories               = false,
      tags                     = false,
      caching                  = false,
      audit_logging            = false,
      toml_config              = false,
      hierarchical_permissions = false,
      dynamic_rules            = false,
    } | C.RbacFeatures,

    content = {
      enabled             = true,
      markdown            = true,
      syntax_highlighting = false,
      file_uploads        = true,
      versioning          = false,
      scheduling          = false,
      seo                 = true,
    } | C.ContentFeatures,

    security = {
      csrf                     = true,
      security_headers         = true,
      rate_limiting            = true,
      input_sanitization       = true,
      sql_injection_protection = true,
      xss_protection           = true,
      content_security_policy  = true,
    } | C.SecurityFeatures,

    performance = {
      response_caching   = true,
      query_caching      = true,
      compression        = true,
      connection_pooling = true,
      lazy_loading       = false,
      background_tasks   = true,
    } | C.PerformanceFeatures,

    custom = {},
  } | C.FeatureConfig,
}
