package invitation

import (
	"context"

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

type DB interface {
	auth.ProtectedDB[*model.Invitation]
	GetPublic(ctx context.Context, invitationRef primitive.ObjectID) (*model.PublicInvitation, error)
	Accept(ctx context.Context, invitationRef primitive.ObjectID) error
	Decline(ctx context.Context, invitationRef primitive.ObjectID) error
	List(ctx context.Context, accountRef, organizationRef, _ primitive.ObjectID, cursor *model.ViewCursor) ([]model.Invitation, error)
	DeleteCascade(ctx context.Context, accountRef, statusRef primitive.ObjectID) error
	SetArchived(ctx context.Context, accountRef, organizationRef, statusRef primitive.ObjectID, archived, cascade bool) error
}
