// Package engineclient is the trusted-internal HTTP client `internal/runtime`
// uses to talk to a running `galaxy-game` engine container. The engine
// contract is the OpenAPI document shipped with the engine module
// (`galaxy/game/openapi.yaml`); this package reuses the existing typed
// DTOs in `pkg/model/{rest,order,report}` rather than introducing its
// own request/response types.
//
// The engine endpoint URL is per-call: the runtime stores it on
// `runtime_records.engine_endpoint` (the value the dockerclient adapter
// returns from Run). The client therefore does not bind a base URL at
// construction time — only the per-call timeouts are wired through
// `Config`.
//
// Error model:
//
// - ErrEngineUnreachable — network failure, 5xx, or timeout. The
// caller transitions the runtime record to `engine_unreachable`
// and re-tries on the next snapshot tick.
// - ErrEngineValidation — engine rejected the request (HTTP 4xx).
// The caller surfaces the engine's body verbatim through to the
// user.
// - ErrEngineProtocolViolation — engine returned an empty body or a
// malformed JSON response on a path that requires one.
package engineclient

import "errors"

var (
	// ErrEngineUnreachable means the engine call failed because of a
	// transport error (network, DNS, connect refused, timeout, 5xx).
	// The implementation callers map this to a runtime status of
	// `engine_unreachable` after a snapshot read.
	ErrEngineUnreachable = errors.New("engineclient: engine unreachable")

	// ErrEngineValidation means the engine returned a 4xx response.
	// Callers forward the engine body so end users see the engine's
	// per-command error reason verbatim.
	ErrEngineValidation = errors.New("engineclient: engine validation failed")

	// ErrEngineProtocolViolation means the engine returned an empty or
	// malformed body on a path that contractually requires one.
	ErrEngineProtocolViolation = errors.New("engineclient: engine protocol violation")
)
