package policy

import "context"

// Spec is a policy specification map passed in ExecutionSpec.Policy.
type Spec map[string]any

// Engine applies and validates policies on execution specs.
type Engine interface {
	// Apply enriches or modifies spec fields based on policy rules.
	Apply(ctx context.Context, adapter, target string, policy Spec) (Spec, error)
	// Validate returns an error if the policy rejects the request.
	Validate(ctx context.Context, adapter, target string, policy Spec) error
}

// Passthrough is a no-op policy engine used when no policy is configured.
type Passthrough struct{}

func (Passthrough) Apply(_ context.Context, _, _ string, policy Spec) (Spec, error) {
	return policy, nil
}

func (Passthrough) Validate(_ context.Context, _, _ string, _ Spec) error {
	return nil
}
