# BZZZ SLURP Configuration
apiVersion: v1
kind: ConfigMap
metadata:
  name: slurp-config
  namespace: bzzz-slurp
  labels:
    app.kubernetes.io/name: bzzz-slurp
    app.kubernetes.io/component: config
data:
  # Application Configuration
  app.yaml: |
    cluster:
      name: "bzzz-slurp-prod"
      region: "us-east-1"
      environment: "production"
    
    network:
      p2p_port: 11434
      http_port: 8080
      metrics_port: 9090
      health_port: 8081
      max_connections: 1000
      connection_timeout: 30s
      keep_alive: true
    
    dht:
      bootstrap_timeout: 60s
      discovery_interval: 300s
      protocol_prefix: "/bzzz-slurp"
      mode: "auto"
      auto_bootstrap: true
      max_peers: 50
    
    replication:
      default_factor: 3
      min_factor: 2
      max_factor: 7
      consistency_level: "eventual"
      repair_threshold: 0.8
      rebalance_interval: 6h
      avoid_same_node: true
    
    storage:
      data_dir: "/app/data"
      max_size: "100GB"
      compression: true
      encryption: true
      backup_enabled: true
      backup_interval: "24h"
    
    security:
      encryption_enabled: true
      role_based_access: true
      audit_logging: true
      tls_enabled: true
      cert_path: "/app/certs"
    
    monitoring:
      metrics_enabled: true
      health_checks: true
      tracing_enabled: true
      log_level: "info"
      structured_logging: true
    
    # Role-based Access Control
    roles:
      senior_architect:
        access_level: "critical"
        compartments: ["architecture", "system", "security"]
        permissions: ["read", "write", "delete", "distribute"]
      
      project_manager:
        access_level: "critical"
        compartments: ["project", "coordination", "planning"]
        permissions: ["read", "write", "distribute"]
      
      devops_engineer:
        access_level: "high"
        compartments: ["infrastructure", "deployment", "monitoring"]
        permissions: ["read", "write", "distribute"]
      
      backend_developer:
        access_level: "medium"
        compartments: ["backend", "api", "services"]
        permissions: ["read", "write"]
      
      frontend_developer:
        access_level: "medium"
        compartments: ["frontend", "ui", "components"]
        permissions: ["read", "write"]

  # Logging Configuration
  logging.yaml: |
    level: info
    format: json
    output: stdout
    
    loggers:
      coordinator:
        level: info
        handlers: ["console", "file"]
      
      distributor:
        level: info
        handlers: ["console", "file", "elasticsearch"]
      
      dht:
        level: warn
        handlers: ["console"]
      
      security:
        level: debug
        handlers: ["console", "file", "audit"]
    
    handlers:
      console:
        type: console
        format: "%(asctime)s %(levelname)s [%(name)s] %(message)s"
      
      file:
        type: file
        filename: "/app/logs/slurp.log"
        max_size: "100MB"
        backup_count: 5
        format: "%(asctime)s %(levelname)s [%(name)s] %(message)s"
      
      elasticsearch:
        type: elasticsearch
        hosts: ["http://elasticsearch:9200"]
        index: "slurp-logs"
      
      audit:
        type: file
        filename: "/app/logs/audit.log"
        max_size: "50MB"
        backup_count: 10

  # Prometheus Configuration
  prometheus.yml: |
    global:
      scrape_interval: 15s
      evaluation_interval: 15s
    
    rule_files:
      - "slurp_alerts.yml"
    
    scrape_configs:
      - job_name: 'slurp-coordinator'
        static_configs:
          - targets: ['slurp-coordinator:9090']
        scrape_interval: 15s
        metrics_path: '/metrics'
      
      - job_name: 'slurp-distributors'
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names:
                - bzzz-slurp
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
            action: keep
            regex: slurp-distributor
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: true
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
            action: replace
            target_label: __address__
            regex: ([^:]+)(?::\d+)?;(\d+)
            replacement: $1:$2

  # Alert Rules
  slurp_alerts.yml: |
    groups:
    - name: slurp.rules
      rules:
      - alert: SlurpCoordinatorDown
        expr: up{job="slurp-coordinator"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "SLURP Coordinator is down"
          description: "SLURP Coordinator has been down for more than 2 minutes."
      
      - alert: SlurpDistributorDown
        expr: up{job="slurp-distributors"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "SLURP Distributor is down"
          description: "SLURP Distributor {{ $labels.instance }} has been down for more than 2 minutes."
      
      - alert: HighMemoryUsage
        expr: (process_resident_memory_bytes / process_virtual_memory_bytes) > 0.9
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High memory usage"
          description: "Memory usage is above 90% for {{ $labels.instance }}"
      
      - alert: HighCPUUsage
        expr: rate(process_cpu_seconds_total[5m]) > 0.8
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage"
          description: "CPU usage is above 80% for {{ $labels.instance }}"
      
      - alert: DHTPartitionDetected
        expr: slurp_network_partitions > 1
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Network partition detected"
          description: "{{ $value }} network partitions detected in the cluster"
      
      - alert: ReplicationFactorBelowThreshold
        expr: slurp_replication_factor < 2
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Replication factor below threshold"
          description: "Average replication factor is {{ $value }}, below minimum of 2"

  # Grafana Dashboard Configuration
  grafana-dashboard.json: |
    {
      "dashboard": {
        "id": null,
        "title": "BZZZ SLURP Distributed Context System",
        "tags": ["bzzz", "slurp", "distributed"],
        "style": "dark",
        "timezone": "UTC",
        "panels": [
          {
            "id": 1,
            "title": "System Overview",
            "type": "stat",
            "targets": [
              {
                "expr": "up{job=~\"slurp-.*\"}",
                "legendFormat": "Services Up"
              }
            ]
          },
          {
            "id": 2,
            "title": "Context Distribution Rate",
            "type": "graph",
            "targets": [
              {
                "expr": "rate(slurp_contexts_distributed_total[5m])",
                "legendFormat": "Distributions/sec"
              }
            ]
          },
          {
            "id": 3,
            "title": "DHT Network Health",
            "type": "graph",
            "targets": [
              {
                "expr": "slurp_dht_connected_peers",
                "legendFormat": "Connected Peers"
              }
            ]
          }
        ],
        "time": {
          "from": "now-1h",
          "to": "now"
        },
        "refresh": "30s"
      }
    }

---
# Secrets (placeholder - should be created separately with actual secrets)
apiVersion: v1
kind: Secret
metadata:
  name: slurp-secrets
  namespace: bzzz-slurp
  labels:
    app.kubernetes.io/name: bzzz-slurp
    app.kubernetes.io/component: secrets
type: Opaque
data:
  # Base64 encoded values - these are examples, use actual secrets in production
  redis-password: YWRtaW4xMjM=  # admin123
  minio-access-key: YWRtaW4=     # admin
  minio-secret-key: YWRtaW4xMjM0NTY=  # admin123456
  elasticsearch-username: ZWxhc3RpYw==  # elastic
  elasticsearch-password: Y2hhbmdlbWU=  # changeme
  encryption-key: "YWJjZGVmZ2hpams="  # base64 encoded encryption key
  jwt-secret: "c3VwZXJzZWNyZXRqd3RrZXk="  # base64 encoded JWT secret