package native

import (
	"context"

	"github.com/tech/sendico/pkg/auth/internal/native/db"
	"github.com/tech/sendico/pkg/auth/internal/native/nstructures"
	"github.com/tech/sendico/pkg/db/template"
	"github.com/tech/sendico/pkg/mlogger"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"go.mongodb.org/mongo-driver/mongo"
)

type RolesDB interface {
	template.DB[*nstructures.RoleAssignment]
	Roles(ctx context.Context, accountRef, organizationRef primitive.ObjectID) ([]nstructures.RoleAssignment, error)
	RolesForVenue(ctx context.Context, organizationRef primitive.ObjectID) ([]nstructures.RoleAssignment, error)
	RemoveRole(ctx context.Context, roleRef, organizationRef, accountRef primitive.ObjectID) error
	DeleteRole(ctx context.Context, roleRef primitive.ObjectID) error
}

func NewRolesDB(logger mlogger.Logger, conn *mongo.Database) (RolesDB, error) {
	return db.NewRolesDB(logger, conn)
}
