# Nickel Schema with Encryption Annotations
#
# This demonstrates how to define encryption in Nickel schemas
# The `Sensitive` contract annotation specifies encryption backend and key path
#
# Usage:
#   1. Convert Nickel schema to TOML form:
#      nickel query nickel-secrets.ncl inputs | typedialog parse-nickel
#
#   2. The resulting TOML form will have encryption_backend and encryption_config
#
#   3. Execute the form:
#      typedialog form output.toml --encrypt --backend age --key-file ~/.age/key.txt
#

# Non-sensitive user information
{
  username | String = "",
  email | String = "",

  # =====================================================================
  # Age Backend (Local X25519 encryption)
  # =====================================================================
  password | Sensitive Backend="age" Key="~/.age/key.txt" = "",
  ssh_private_key | Sensitive Backend="age" = "",

  # =====================================================================
  # SOPS Backend (Multi-KMS support via .sops.yaml)
  # Uses .sops.yaml for KMS configuration (AWS/GCP/Azure)
  # =====================================================================
  database_password | Sensitive Backend="sops" = "",
  vault_token | Sensitive Backend="sops" = "",

  # =====================================================================
  # SecretumVault (Post-quantum cryptography ready)
  # =====================================================================
  api_key | Sensitive Backend="secretumvault" Vault="https://vault:8200" Key="app-key" = "",
  encryption_key | Sensitive Backend="secretumvault" = "",

  # =====================================================================
  # AWS KMS (Direct integration)
  # =====================================================================
  aws_secret | Sensitive Backend="awskms" Region="us-east-1" KeyId="arn:aws:kms:..." = "",

  # Sensitive fields without explicit backend
  # Will use CLI --backend flag or global default (Age)
  backup_key | Sensitive = "",

  # Nested structure with mixed backends
  server | {
    host | String = "localhost",
    port | Number = 8080,
    # Age backend
    admin_token | Sensitive Backend="age" = "",
    # SOPS backend
    db_password | Sensitive Backend="sops" = "",
  } = {},

  # Optional sensitive field (Age)
  ssh_public_key | String? = null,
}
