# AWS Provider Configuration Schema

let defaults = import "./aws-defaults.ncl" in

{
  # Contract definitions

  AWSAuth = {
    interface | String,  # API or CLI
    region | String,
  },

  AWSPaths = {
    base | String,
    cache | String,
    state | String,
  },

  AWSAPI = {
    url | String,
    timeout | Number,
    region | String,
  },

  AWSProvider = {
    name | String,
    enabled | Bool,
    workspace | String,
    auth | AWSAuth,
    paths | AWSPaths,
    api | AWSAPI,
  },

  # Hybrid interface
  defaults = defaults,

  make_auth | not_exported = fun o =>
    defaults.auth & o,

  make_paths | not_exported = fun o =>
    defaults.paths & o,

  make_api | not_exported = fun o =>
    defaults.api & o,

  make_aws | not_exported = fun o =>
    defaults.aws & o,

  # Default instances
  DefaultAuth = defaults.auth,
  DefaultPaths = defaults.paths,
  DefaultAPI = defaults.api,
  DefaultAWSProvider = defaults.aws,
}
