package management

import (
	"context"

	"github.com/tech/sendico/pkg/model"
	"go.mongodb.org/mongo-driver/v2/bson"
)

type Permission interface {
	// Grant a permission to a role with an optional object scope and specified effect.
	// Use bson.NilObjectID for 'any' objectRef.
	GrantToRole(ctx context.Context, policy *model.RolePolicy) error

	// Revoke a permission from a role with an optional object scope and specified effect.
	// Use bson.NilObjectID for 'any' objectRef.
	RevokeFromRole(ctx context.Context, policy *model.RolePolicy) error

	// Retrieve all policies assigned to a specific role, including scope and effects.
	GetPolicies(
		ctx context.Context,
		roleRef bson.ObjectID,
	) ([]model.RolePolicy, error)

	// Persist any changes made to permissions.
	Save() error
}
