package policy

import _ "embed"

// ReferenceRego is the canonical Rego policy bundled with zddc-server.
// It mirrors the InternalDecider's semantics exactly — every release CI
// run validates parity via parity_test.go (which imports the OPA library
// as a test-only dependency, so the production binary stays OPA-free).
//
// Operators running an external OPA can use this as the starting point
// for their own policy bundle:
//
//	zddc-server --print-rego > /etc/opa/policies/zddc-access.rego
//
// Customizations typical for federal deployments:
//
//   - Flip the leaf-allow-overrides-parent-deny semantics so parent denies
//     are absolute (NIST AC-6 least-privilege posture). For this specific
//     case zddc-server ships a parity-tested federal-mode variant; see
//     FederalRego and `--print-rego=federal`.
//   - Add role-based access via additional input fields (input.user.roles
//     populated by the upstream proxy from SAML/OIDC claims).
//   - Add time-of-day or IP-range constraints.
//   - Emit decision logs in a SIEM-friendly format via OPA's logging
//     plugins.
//
//go:embed rego/access.rego
var ReferenceRego string

// FederalRego is the strict-least-privilege variant of ReferenceRego
// where parent denies are absolute (NIST AC-6). Drop-in for federal
// customers who need the AC-6 posture without writing Rego from
// scratch:
//
//	zddc-server --print-rego=federal > /etc/opa/policies/zddc-access.rego
//
// The internal Go evaluator does NOT implement these semantics — it
// stays on the commercial cascade. Federal-mode is reachable only by
// running OPA with this policy and pointing ZDDC_OPA_URL at it. See
// zddc/internal/policy/rego/access_federal.rego for the policy itself
// and federal_parity_test.go for the divergence-test fixtures (cases
// where federal-mode and commercial-mode disagree, asserting each gives
// the expected verdict).
//
//go:embed rego/access_federal.rego
var FederalRego string
