# Nested Provisioning (VM → VM → Containers)
#
# Hybrid pattern: defaults + makers + instances

let contracts_lib = import "./contracts.ncl" in
let defaults_lib = import "./defaults.ncl" in

{
  defaults = defaults_lib,

  # Maker functions (not exported)
  make_volume | not_exported = fun overrides =>
    defaults_lib.VolumeConfig & overrides,

  make_network | not_exported = fun overrides =>
    defaults_lib.NetworkConfig & overrides,

  make_nested_vm | not_exported = fun overrides =>
    defaults_lib.NestedVmConfig & overrides,

  make_container | not_exported = fun overrides =>
    defaults_lib.ContainerConfig & overrides,

  make_multi_tier | not_exported = fun overrides =>
    defaults_lib.MultiTierDeployment & overrides,

  make_network_policy | not_exported = fun overrides =>
    defaults_lib.NetworkPolicy & overrides,

  make_volume_snapshot | not_exported = fun overrides =>
    defaults_lib.VolumeSnapshot & overrides,

  make_provisioning_policy | not_exported = fun overrides =>
    defaults_lib.NestedProvisioningPolicy & overrides,

  # Default instances
  DefaultVolumeConfig = defaults_lib.VolumeConfig,
  DefaultNetworkConfig = defaults_lib.NetworkConfig,
  DefaultNestedVmConfig = defaults_lib.NestedVmConfig,
  DefaultContainerConfig = defaults_lib.ContainerConfig,
  DefaultMultiTierDeployment = defaults_lib.MultiTierDeployment,
  DefaultNetworkPolicy = defaults_lib.NetworkPolicy,
  DefaultVolumeSnapshot = defaults_lib.VolumeSnapshot,
  DefaultNestedProvisioningPolicy = defaults_lib.NestedProvisioningPolicy,
}
