# Default values for skill-seekers Helm chart
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

# Global configuration
global:
  # Environment: development, staging, production
  environment: production

# Main application (CLI)
app:
  enabled: true
  name: skill-seekers
  replicaCount: 1

  image:
    repository: skill-seekers
    pullPolicy: IfNotPresent
    tag: "latest"

  imagePullSecrets: []
  nameOverride: ""
  fullnameOverride: ""

  serviceAccount:
    create: true
    annotations: {}
    name: ""

  podAnnotations: {}
  podSecurityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 1000

  securityContext:
    capabilities:
      drop:
      - ALL
    readOnlyRootFilesystem: false
    allowPrivilegeEscalation: false

  resources:
    limits:
      cpu: 2000m
      memory: 4Gi
    requests:
      cpu: 500m
      memory: 1Gi

  nodeSelector: {}
  tolerations: []
  affinity: {}

# MCP Server
mcpServer:
  enabled: true
  name: mcp-server
  replicaCount: 2

  image:
    repository: skill-seekers-mcp
    pullPolicy: IfNotPresent
    tag: "latest"

  service:
    type: ClusterIP
    port: 8765
    targetPort: 8765
    protocol: TCP

  podAnnotations: {}
  podSecurityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 1000

  securityContext:
    capabilities:
      drop:
      - ALL
    readOnlyRootFilesystem: false
    allowPrivilegeEscalation: false

  resources:
    limits:
      cpu: 1000m
      memory: 2Gi
    requests:
      cpu: 250m
      memory: 512Mi

  # Horizontal Pod Autoscaler
  autoscaling:
    enabled: true
    minReplicas: 2
    maxReplicas: 10
    targetCPUUtilizationPercentage: 70
    targetMemoryUtilizationPercentage: 80

  # Health checks
  livenessProbe:
    httpGet:
      path: /health
      port: 8765
    initialDelaySeconds: 30
    periodSeconds: 10
    timeoutSeconds: 5
    successThreshold: 1
    failureThreshold: 3

  readinessProbe:
    httpGet:
      path: /health
      port: 8765
    initialDelaySeconds: 10
    periodSeconds: 5
    timeoutSeconds: 3
    successThreshold: 1
    failureThreshold: 3

  nodeSelector: {}
  tolerations: []
  affinity: {}

# Environment variables (non-sensitive)
env:
  MCP_TRANSPORT: "http"
  MCP_PORT: "8765"
  PYTHONUNBUFFERED: "1"
  PYTHONDONTWRITEBYTECODE: "1"

# Secrets (sensitive values)
# Set these via --set or external secret management
secrets:
  # Claude AI / Anthropic API
  anthropicApiKey: ""
  # Google Gemini API (optional)
  googleApiKey: ""
  # OpenAI API (optional)
  openaiApiKey: ""
  # GitHub Token (optional)
  githubToken: ""

# Persistent storage
persistence:
  enabled: true

  data:
    enabled: true
    storageClass: ""
    accessMode: ReadWriteOnce
    size: 10Gi
    existingClaim: ""

  output:
    enabled: true
    storageClass: ""
    accessMode: ReadWriteOnce
    size: 20Gi
    existingClaim: ""

  configs:
    enabled: true
    storageClass: ""
    accessMode: ReadOnlyMany
    size: 1Gi
    existingClaim: ""

# Vector Databases
vectorDatabases:
  # Weaviate
  weaviate:
    enabled: true
    replicaCount: 1

    image:
      repository: semitechnologies/weaviate
      tag: latest
      pullPolicy: IfNotPresent

    service:
      type: ClusterIP
      port: 8080

    resources:
      limits:
        cpu: 2000m
        memory: 4Gi
      requests:
        cpu: 500m
        memory: 1Gi

    persistence:
      enabled: true
      storageClass: ""
      size: 50Gi

  # Qdrant
  qdrant:
    enabled: true
    replicaCount: 1

    image:
      repository: qdrant/qdrant
      tag: latest
      pullPolicy: IfNotPresent

    service:
      type: ClusterIP
      httpPort: 6333
      grpcPort: 6334

    resources:
      limits:
        cpu: 2000m
        memory: 4Gi
      requests:
        cpu: 500m
        memory: 1Gi

    persistence:
      enabled: true
      storageClass: ""
      size: 50Gi

  # Chroma
  chroma:
    enabled: true
    replicaCount: 1

    image:
      repository: ghcr.io/chroma-core/chroma
      tag: latest
      pullPolicy: IfNotPresent

    service:
      type: ClusterIP
      port: 8000

    resources:
      limits:
        cpu: 1000m
        memory: 2Gi
      requests:
        cpu: 250m
        memory: 512Mi

    persistence:
      enabled: true
      storageClass: ""
      size: 30Gi

# Ingress configuration
ingress:
  enabled: false
  className: "nginx"
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  hosts:
    - host: skill-seekers.example.com
      paths:
        - path: /mcp
          pathType: Prefix
          backend:
            service:
              name: mcp-server
              port: 8765
  tls:
    - secretName: skill-seekers-tls
      hosts:
        - skill-seekers.example.com

# Service Monitor (Prometheus)
serviceMonitor:
  enabled: false
  interval: 30s
  scrapeTimeout: 10s
  labels: {}

# Network Policies
networkPolicy:
  enabled: false
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            name: monitoring
  egress:
    - to:
      - namespaceSelector: {}

# RBAC
rbac:
  create: true
  rules: []

# Pod Disruption Budget
podDisruptionBudget:
  enabled: true
  minAvailable: 1

# Resource Quotas
resourceQuota:
  enabled: false
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    persistentvolumeclaims: "10"
