package paymethoddb

import (
	"context"
	"errors"

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

func (db *PaymentMethodsDB) List(ctx context.Context, accountRef, organizationRef, recipientRef primitive.ObjectID, cursor *model.ViewCursor) ([]model.PaymentMethod, error) {
	res, err := mauth.GetProtectedObjects[model.PaymentMethod](
		ctx,
		db.DBImp.Logger,
		accountRef, organizationRef, model.ActionRead,
		repository.OrgFilter(organizationRef).And(repository.Filter("recipientRef", recipientRef)),
		cursor,
		db.Enforcer,
		db.DBImp.Repository,
	)
	if errors.Is(err, merrors.ErrNoData) {
		return []model.PaymentMethod{}, nil
	}
	return res, err
}
