# Caddyfile for client2server
# Single port (:3843) serves WebSocket and HTTP API; Caddy load-balances
# across server1 and server2 in the Docker network.

{
    # Global options
    # email your@email.com
    admin off
    auto_https off
}

# ========================================
# Unified WebSocket + HTTP load balancer (:3843)
# ========================================
:3843 {
    # Backend servers (Docker network DNS)
    reverse_proxy server1:3843 server2:3843 {
        # Health check each backend
        health_uri /health
        health_interval 10s
        health_timeout 5s
        health_status 2xx

        # Load balancing policy
        lb_policy round_robin

        # WebSocket support (long-lived connections)
        # Caddy auto-detects Upgrade headers, no explicit directive needed
    }

    # Preserve client info
    header_up X-Real-IP {remote}
    header_up X-Forwarded-For {remote}
    header_up X-Forwarded-Proto {scheme}

    # Timeouts for long-lived WebSocket connections
    timeouts {
        read  300s
        write 300s
        idle  300s
    }
}

# ========================================
# Dashboard (port 80) - React SPA via separate Caddy in dashboard container
# ========================================
:80, :443 {
    reverse_proxy dashboard:80
}

# ========================================
# TLS for HTTPS (optional - requires auto_https on)
# ========================================
# tls {
#     # Let's Encrypt (automatic)
# }
