# Configuration Template
# Standardized template for application and system configuration management across the AI Agentic Data Stack Framework

metadata:
  template_id: "configuration-tmpl"
  name: "Configuration Template"
  version: "1.0.0"
  description: "Comprehensive template for managing application configurations, environment variables, and system settings"
  category: "technical-implementation"
  tags: ["configuration", "environment", "settings", "parameters", "management"]
  created_by: "AI Agentic Data Stack Framework"
  created_date: "2025-01-23"
template:
  name: "Configuration Template"
  description: "Template for configuration implementation and management"
  version: "1.0.0"


# Configuration Management Setup
config_management:
  config_id: "${configuration_id}"
  config_name: "${configuration_name}"
  application_name: "${application_name}"
  environment: "${target_environment}" # development, staging, production, disaster_recovery
  config_version: "${configuration_version}"
  config_owner: "${configuration_owner}"

# Application Configuration
application_config:
  # Application Details
  application_details:
    application_id: "${application_id}"
    application_version: "${application_version}"
    runtime_environment: "${runtime_environment}" # java, python, node, .net
    deployment_platform: "${deployment_platform}" # kubernetes, docker, vm, serverless
    
  # Server Configuration
  server_config:
    server_port: ${server_port}
    server_host: "${server_host}"
    server_protocol: "${server_protocol}" # http, https
    context_path: "${server_context_path}"
    
    # Thread Pool Configuration
    thread_pool:
      core_pool_size: ${thread_pool_core_size}
      max_pool_size: ${thread_pool_max_size}
      queue_capacity: ${thread_pool_queue_capacity}
      keep_alive_time: ${thread_pool_keep_alive_time}
      
  # Session Configuration
  session_config:
    session_timeout: ${session_timeout_minutes}
    session_store_type: "${session_store_type}" # memory, redis, database
    session_cookie_name: "${session_cookie_name}"
    session_cookie_secure: ${session_cookie_secure}

# Database Configuration
database_config:
  # Primary Database
  primary_database:
    database_type: "${primary_db_type}" # mysql, postgresql, oracle, mongodb
    connection_url: "${primary_db_connection_url}"
    username: "${primary_db_username}"
    password_reference: "${primary_db_password_reference}"
    
    # Connection Pool Settings
    connection_pool:
      initial_size: ${primary_db_pool_initial_size}
      max_active: ${primary_db_pool_max_active}
      max_idle: ${primary_db_pool_max_idle}
      min_idle: ${primary_db_pool_min_idle}
      max_wait: ${primary_db_pool_max_wait}
      
    # Connection Properties
    connection_properties:
      auto_commit: ${primary_db_auto_commit}
      read_only: ${primary_db_read_only}
      transaction_isolation: "${primary_db_transaction_isolation}"
      
  # Read Replica Configuration
  read_replica:
    enabled: ${read_replica_enabled}
    connection_url: "${read_replica_connection_url}"
    load_balancing_strategy: "${read_replica_load_balancing}"
    
  # Database Migration
  migration_config:
    migration_enabled: ${database_migration_enabled}
    migration_tool: "${migration_tool}" # flyway, liquibase
    migration_location: "${migration_scripts_location}"
    baseline_on_migrate: ${migration_baseline_on_migrate}

# Cache Configuration
cache_config:
  # Application Cache
  application_cache:
    cache_provider: "${cache_provider}" # redis, memcached, hazelcast, ehcache
    cache_nodes: ["${cache_nodes}"]
    
    # Redis Configuration
    redis_config:
      host: "${redis_host}"
      port: ${redis_port}
      password_reference: "${redis_password_reference}"
      database: ${redis_database}
      timeout: ${redis_timeout}
      
      # Redis Pool Settings
      pool_config:
        max_total: ${redis_pool_max_total}
        max_idle: ${redis_pool_max_idle}
        min_idle: ${redis_pool_min_idle}
        
  # Cache Policies
  cache_policies:
    - cache_name: "${cache_name}"
      time_to_live: ${cache_ttl_seconds}
      max_entries: ${cache_max_entries}
      eviction_policy: "${cache_eviction_policy}" # lru, lfu, fifo
      
  # Distributed Cache
  distributed_cache:
    enabled: ${distributed_cache_enabled}
    consistency_level: "${cache_consistency_level}" # strong, eventual
    replication_factor: ${cache_replication_factor}

# Message Queue Configuration
message_queue_config:
  # Queue Provider
  queue_provider: "${queue_provider}" # rabbitmq, kafka, aws_sqs, azure_service_bus
  
  # RabbitMQ Configuration
  rabbitmq_config:
    host: "${rabbitmq_host}"
    port: ${rabbitmq_port}
    username: "${rabbitmq_username}"
    password_reference: "${rabbitmq_password_reference}"
    virtual_host: "${rabbitmq_virtual_host}"
    
    # Connection Settings
    connection_settings:
      connection_timeout: ${rabbitmq_connection_timeout}
      heartbeat: ${rabbitmq_heartbeat}
      network_recovery_interval: ${rabbitmq_network_recovery_interval}
      
  # Kafka Configuration
  kafka_config:
    bootstrap_servers: ["${kafka_bootstrap_servers}"]
    security_protocol: "${kafka_security_protocol}"
    
    # Producer Settings
    producer_config:
      acks: "${kafka_producer_acks}"
      retries: ${kafka_producer_retries}
      batch_size: ${kafka_producer_batch_size}
      linger_ms: ${kafka_producer_linger_ms}
      
    # Consumer Settings
    consumer_config:
      group_id: "${kafka_consumer_group_id}"
      auto_offset_reset: "${kafka_consumer_auto_offset_reset}"
      enable_auto_commit: ${kafka_consumer_enable_auto_commit}
      max_poll_records: ${kafka_consumer_max_poll_records}

# Security Configuration
security_config:
  # Authentication Configuration
  authentication:
    auth_provider: "${auth_provider}" # oauth2, ldap, database, jwt
    
    # OAuth2 Configuration
    oauth2:
      client_id: "${oauth2_client_id}"
      client_secret_reference: "${oauth2_client_secret_reference}"
      authorization_uri: "${oauth2_authorization_uri}"
      token_uri: "${oauth2_token_uri}"
      user_info_uri: "${oauth2_user_info_uri}"
      
    # JWT Configuration
    jwt:
      secret_key_reference: "${jwt_secret_key_reference}"
      token_expiration: ${jwt_token_expiration_hours}
      refresh_token_expiration: ${jwt_refresh_token_expiration_hours}
      
  # SSL/TLS Configuration
  ssl_tls:
    enabled: ${ssl_enabled}
    keystore_location: "${ssl_keystore_location}"
    keystore_password_reference: "${ssl_keystore_password_reference}"
    truststore_location: "${ssl_truststore_location}"
    truststore_password_reference: "${ssl_truststore_password_reference}"
    
  # CORS Configuration
  cors:
    enabled: ${cors_enabled}
    allowed_origins: ["${cors_allowed_origins}"]
    allowed_methods: ["${cors_allowed_methods}"]
    allowed_headers: ["${cors_allowed_headers}"]
    allow_credentials: ${cors_allow_credentials}

# Logging Configuration
logging_config:
  # Log Levels
  log_levels:
    root_level: "${root_log_level}" # trace, debug, info, warn, error
    application_level: "${application_log_level}"
    framework_levels:
      - framework_name: "${framework_name}" # spring, hibernate, kafka
        log_level: "${framework_log_level}"
        
  # Log Appenders
  log_appenders:
    # Console Appender
    console:
      enabled: ${console_logging_enabled}
      pattern: "${console_log_pattern}"
      
    # File Appender
    file:
      enabled: ${file_logging_enabled}
      file_path: "${log_file_path}"
      max_file_size: "${log_max_file_size}"
      max_history: ${log_max_history}
      total_size_cap: "${log_total_size_cap}"
      
    # Centralized Logging
    centralized:
      enabled: ${centralized_logging_enabled}
      log_aggregator: "${log_aggregator}" # elk, splunk, fluentd
      aggregator_endpoint: "${log_aggregator_endpoint}"
      
  # Structured Logging
  structured_logging:
    enabled: ${structured_logging_enabled}
    log_format: "${structured_log_format}" # json, logstash
    include_mdc: ${structured_logging_include_mdc}

# Monitoring Configuration
monitoring_config:
  # Metrics Configuration
  metrics:
    enabled: ${metrics_enabled}
    metrics_provider: "${metrics_provider}" # micrometer, prometheus, statsd
    
    # Prometheus Configuration
    prometheus:
      enabled: ${prometheus_metrics_enabled}
      endpoint_path: "${prometheus_metrics_endpoint}"
      include_jvm_metrics: ${prometheus_include_jvm_metrics}
      
  # Health Checks
  health_checks:
    enabled: ${health_checks_enabled}
    endpoint_path: "${health_check_endpoint}"
    
    # Custom Health Indicators
    custom_indicators:
      - indicator_name: "${health_indicator_name}"
        indicator_class: "${health_indicator_class}"
        enabled: ${health_indicator_enabled}
        
  # Application Performance Monitoring
  apm:
    enabled: ${apm_enabled}
    apm_provider: "${apm_provider}" # new_relic, datadog, elastic_apm
    service_name: "${apm_service_name}"

# External Service Configuration
external_services:
  # HTTP Clients
  http_clients:
    - client_name: "${http_client_name}"
      base_url: "${http_client_base_url}"
      connection_timeout: ${http_client_connection_timeout}
      read_timeout: ${http_client_read_timeout}
      
      # Authentication
      authentication:
        auth_type: "${http_client_auth_type}" # basic, bearer, api_key
        credentials_reference: "${http_client_credentials_reference}"
        
      # Retry Configuration
      retry_config:
        max_attempts: ${http_client_max_retry_attempts}
        backoff_strategy: "${http_client_backoff_strategy}"
        
  # Third-Party APIs
  third_party_apis:
    - api_name: "${third_party_api_name}"
      api_endpoint: "${third_party_api_endpoint}"
      api_key_reference: "${third_party_api_key_reference}"
      rate_limit: ${third_party_api_rate_limit}

# Environment Variables
environment_variables:
  # Application Variables
  application_variables:
    - variable_name: "${app_env_var_name}"
      variable_value: "${app_env_var_value}"
      variable_type: "${app_env_var_type}" # string, number, boolean
      required: ${app_env_var_required}
      
  # System Variables
  system_variables:
    - variable_name: "${system_env_var_name}"
      variable_value: "${system_env_var_value}"
      description: "${system_env_var_description}"
      
  # Secret Variables
  secret_variables:
    - variable_name: "${secret_env_var_name}"
      secret_reference: "${secret_env_var_reference}"
      secret_provider: "${secret_provider}" # aws_secrets, azure_keyvault, kubernetes

# Feature Flags
feature_flags:
  # Feature Flag Configuration
  feature_flag_config:
    provider: "${feature_flag_provider}" # launch_darkly, split, flipt
    environment_key: "${feature_flag_environment_key}"
    
  # Feature Definitions
  features:
    - feature_name: "${feature_name}"
      feature_key: "${feature_key}"
      default_value: ${feature_default_value}
      description: "${feature_description}"
      
      # Feature Variations
      variations:
        - variation_name: "${feature_variation_name}"
          variation_value: ${feature_variation_value}
          percentage: ${feature_variation_percentage}

# Resource Limits
resource_limits:
  # JVM Configuration (for Java applications)
  jvm_config:
    heap_size_initial: "${jvm_heap_initial}"
    heap_size_maximum: "${jvm_heap_maximum}"
    garbage_collector: "${jvm_garbage_collector}"
    jvm_options: ["${jvm_additional_options}"]
    
  # Container Resources
  container_resources:
    cpu_request: "${container_cpu_request}"
    cpu_limit: "${container_cpu_limit}"
    memory_request: "${container_memory_request}"
    memory_limit: "${container_memory_limit}"
    
  # File System
  file_system:
    temp_directory: "${temp_directory_path}"
    max_file_upload_size: "${max_file_upload_size}"
    max_request_size: "${max_request_size}"

# Backup and Recovery
backup_recovery:
  # Backup Configuration
  backup_config:
    backup_enabled: ${backup_enabled}
    backup_frequency: "${backup_frequency}"
    backup_retention: "${backup_retention_period}"
    backup_location: "${backup_storage_location}"
    
  # Recovery Configuration
  recovery_config:
    recovery_enabled: ${recovery_enabled}
    recovery_point_objective: "${recovery_point_objective}"
    recovery_time_objective: "${recovery_time_objective}"

# Configuration Validation
configuration_validation:
  # Validation Rules
  validation_rules:
    - property_name: "${validation_property_name}"
      validation_type: "${validation_type}" # required, range, pattern, custom
      validation_criteria: "${validation_criteria}"
      error_message: "${validation_error_message}"
      
  # Configuration Schema
  configuration_schema:
    schema_location: "${config_schema_location}"
    schema_format: "${config_schema_format}" # json_schema, xml_schema
    validation_enabled: ${config_schema_validation_enabled}

# Configuration Management
config_management_strategy:
  # Configuration Sources
  config_sources:
    - source_type: "${config_source_type}" # file, environment, consul, etcd
      source_location: "${config_source_location}"
      priority: ${config_source_priority}
      
  # Configuration Refresh
  config_refresh:
    auto_refresh_enabled: ${config_auto_refresh_enabled}
    refresh_interval: ${config_refresh_interval_seconds}
    refresh_triggers: ["${config_refresh_triggers}"]
    
  # Configuration Encryption
  config_encryption:
    encryption_enabled: ${config_encryption_enabled}
    encryption_key_reference: "${config_encryption_key_reference}"
    encrypted_properties: ["${encrypted_config_properties}"]

# Validation Rules
validation_rules:
  required_fields:
    - config_id
    - config_name
    - application_name
    - target_environment
    - application_config
    - database_config

# Template Metadata
template_metadata:
  author: "AI Agentic Data Stack Framework"
  maintainer: "Configuration Manager"
  last_updated: "2025-01-23"

sections:
  - name: "overview"
    description: "Overview and objectives"
    required: true
  - name: "configuration"
    description: "Configuration and setup"
    required: true
  - name: "implementation"
    description: "Implementation details"
    required: true
  - name: "validation"
    description: "Validation and testing"
    required: false
