{
    email {$ACME_EMAIL:admin@kucial.com}

    servers {
        # cloudflared and Docker's gateways sit on private ranges. Take the real
        # client IP from their headers instead of reporting their own address;
        # upstreams receive it in X-Forwarded-For.
        trusted_proxies static private_ranges
        client_ip_headers Cf-Connecting-Ip X-Forwarded-For
    }
}

# Reusable TLS block using Cloudflare DNS-01 ACME challenge (Let's Encrypt / ZeroSSL)
(cloudflare_tls) {
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN}
    }
}

# Synotrip (PHP 8.3 / MariaDB / Redis)
synotrip.kucial.com {
    import cloudflare_tls
    reverse_proxy host.docker.internal:3200
}

npm.kucial.com {
    import cloudflare_tls
    reverse_proxy host.docker.internal:4873
}

# Blog (PHP 8.3 / MariaDB)
blog.kucial.com {
    import cloudflare_tls
    reverse_proxy host.docker.internal:3201
}


# Gitea on Z2Pro
gitea.kucial.com {
    import cloudflare_tls
    reverse_proxy 192.168.50.228:8081
}

*.ddev.kucial.com {
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN}
    }

    @api host gig-api.ddev.kucial.com
    handle @api {
        reverse_proxy https://192.168.50.160:443 {
            header_up Host gig-platform.ddev.site
            transport http {
                tls_server_name gig-platform.ddev.site
                # The public device-facing certificate is still fully trusted.
                # This applies only to the fixed, private Caddy-to-DDEV hop.
                tls_insecure_skip_verify
            }
        }
    }

    @socket host gig-socket.ddev.kucial.com
    handle @socket {
        reverse_proxy http://192.168.50.160:6001 {
            header_up Host gig-platform.ddev.site
        }
    }

    @voice host gig-voice.ddev.kucial.com
    handle @voice {
        reverse_proxy http://192.168.50.160:7880 {
            header_up Host gig-platform.ddev.site
        }
    }

    @static host gig-static.ddev.kucial.com
    handle @static {
        reverse_proxy https://192.168.50.160:443 {
            header_up Host gig-platform.ddev.site
            transport http {
                tls_server_name gig-platform.ddev.site
                tls_insecure_skip_verify
            }
        }
    }

    respond 404
}

# Per-project sites, one file each (sites/*.caddy). Project instances are
# reached over the shared `edge` Docker network by container alias rather than
# host ports — see sites/gig-platform.caddy.
import sites/*.caddy
