package papitemplate

import (
	"context"

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

type ProtectedDB[T any] interface {
	Create(ctx context.Context, accountRef, organizationRef primitive.ObjectID, object *T) error
	Get(ctx context.Context, accountRef, objectRef primitive.ObjectID, result *T) error
	Update(ctx context.Context, accountRef primitive.ObjectID, object *T) error
	Delete(ctx context.Context, accountRef, objectRef primitive.ObjectID) error
	DeleteCascadeAuth(ctx context.Context, accountRef, objectRef primitive.ObjectID) error
	SetArchived(ctx context.Context, accountRef, organizationRef, objectRef primitive.ObjectID, isArchived, cascade bool) error
	List(ctx context.Context, accountRef, organizationRef, parentRef primitive.ObjectID, cursor *model.ViewCursor) ([]T, error)
}

type ReorderDB interface {
	Reorder(ctx context.Context, accountRef, objectRef primitive.ObjectID, newIndex int, filter builder.Query) error
}
