# Traefik Dynamic Configuration for Blue-Green Deployment
# This file is watched by Traefik and reloaded on changes
# Traffic weights are updated by scripts/ci/switch-traffic.sh
#
# Current active stack is determined by weights:
#   - blue=100, green=0  -> Blue is active
#   - blue=0, green=100  -> Green is active
#   - Gradual: 75/25, 50/50, 25/75 for canary deployments

http:
  # ========================================
  # Routers - Route traffic to weighted services
  # ========================================
  routers:
    # Frontend router with weighted service
    mvp-frontend-bluegreen:
      rule: "(Host(`motovaultpro.com`) || Host(`www.motovaultpro.com`)) && !PathPrefix(`/api`)"
      entryPoints:
        - websecure
      tls:
        certResolver: letsencrypt
      service: mvp-frontend-weighted
      priority: 10

    # Backend API router with weighted service
    mvp-backend-bluegreen:
      rule: "(Host(`motovaultpro.com`) || Host(`www.motovaultpro.com`)) && PathPrefix(`/api`)"
      entryPoints:
        - websecure
      tls:
        certResolver: letsencrypt
      service: mvp-backend-weighted
      priority: 20

    # Health check router (always routes to active stack)
    mvp-backend-health:
      rule: "(Host(`motovaultpro.com`) || Host(`www.motovaultpro.com`)) && Path(`/api/health`)"
      entryPoints:
        - websecure
      tls:
        certResolver: letsencrypt
      service: mvp-backend-weighted
      priority: 30

  # ========================================
  # Services - Weighted load balancers
  # ========================================
  services:
    # Frontend weighted service
    # Weights are updated by switch-traffic.sh
    mvp-frontend-weighted:
      weighted:
        services:
          - name: mvp-frontend-blue-svc
            weight: 100
          - name: mvp-frontend-green-svc
            weight: 0
        healthCheck: {}

    # Backend weighted service
    # Weights are updated by switch-traffic.sh
    mvp-backend-weighted:
      weighted:
        services:
          - name: mvp-backend-blue-svc
            weight: 100
          - name: mvp-backend-green-svc
            weight: 0
        healthCheck: {}

    # Individual stack services
    mvp-frontend-blue-svc:
      loadBalancer:
        servers:
          - url: "http://mvp-frontend-blue:3000"
        healthCheck:
          path: /
          interval: 10s
          timeout: 3s
        passHostHeader: true

    mvp-frontend-green-svc:
      loadBalancer:
        servers:
          - url: "http://mvp-frontend-green:3000"
        healthCheck:
          path: /
          interval: 10s
          timeout: 3s
        passHostHeader: true

    mvp-backend-blue-svc:
      loadBalancer:
        servers:
          - url: "http://mvp-backend-blue:3001"
        healthCheck:
          path: /health
          interval: 10s
          timeout: 3s
        passHostHeader: true

    mvp-backend-green-svc:
      loadBalancer:
        servers:
          - url: "http://mvp-backend-green:3001"
        healthCheck:
          path: /health
          interval: 10s
          timeout: 3s
        passHostHeader: true

    # Maintenance mode service (optional)
    mvp-maintenance:
      loadBalancer:
        servers:
          - url: "http://mvp-maintenance:80"
