{
	email {$ACME_EMAIL}
	# Em dev local (*.localhost) Caddy emite cert interno automaticamente.
	# Em produção, Let's Encrypt entra pelos hostnames reais.
}

# ----- Gitea (UI + git over HTTPS) -----
gitea.{$DOMAIN_BASE} {
	encode zstd gzip
	reverse_proxy gitea:3000 {
		transport http {
			response_header_timeout 10m
			dial_timeout 30s
		}
	}
}

# ----- Wedding (app dos noivos) -----
wedding.{$DOMAIN_BASE} {
	encode zstd gzip
	request_body {
		max_size 600MB
	}
	reverse_proxy wedding_app:3000 {
		transport http {
			response_header_timeout 10m
			dial_timeout 30s
		}
	}
}

# ----- Finance (lronetto-finance, repo à parte) -----
finance.{$DOMAIN_BASE} {
	encode gzip zstd
	header {
		Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
		X-Content-Type-Options "nosniff"
		Referrer-Policy "strict-origin-when-cross-origin"
		Permissions-Policy "geolocation=(), microphone=(), camera=()"
		Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.pluggy.ai; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https://api.pluggy.ai; frame-src https://connect.pluggy.ai; frame-ancestors 'self'; base-uri 'self'; form-action 'self'"
		-Server
	}
	reverse_proxy finance_app:8000
}

# ----- Claudeweb (lronetto-claudeweb, repo à parte) — subdomínio é "code", não "claudeweb" -----
code.{$DOMAIN_BASE} {
	encode zstd gzip

	@backend path /api/* /healthz /ws/*
	handle @backend {
		reverse_proxy claudeweb-api:8300
	}

	handle {
		reverse_proxy claudeweb-web:80
	}
}

# ----- pgAdmin -----
pgadmin.{$DOMAIN_BASE} {
	encode gzip
	reverse_proxy pgadmin:80
}

# ----- MinIO console (admin web) -----
minio.{$DOMAIN_BASE} {
	encode gzip
	reverse_proxy minio:9001
}

# ----- MinIO S3 API público (uploads/downloads do bucket) -----
media.{$DOMAIN_BASE} {
	encode gzip
	# NÃO reescrever o Host: as URLs pré-assinadas (SigV4) incluem o header
	# `host` na assinatura, calculado com `media.{DOMAIN_BASE}`. O Caddy
	# repassa o Host original por padrão; reescrever pra `minio:9000`
	# quebraria a assinatura (SignatureDoesNotMatch / 403 no PUT).
	reverse_proxy minio:9000
}
