package repository

import (
	"context"

	"gateway/internal/model/permission/domain/entity"
)

// RolePermissionRepository manages the role↔permission catalog join.
//
// SetForRole replaces all permission IDs of a role atomically (delete +
// bulk insert). Use it when the UI submits a "edit role permissions"
// form so callers don't have to diff manually.
type RolePermissionRepository interface {
	Insert(ctx context.Context, rp *entity.RolePermission) error
	BulkInsert(ctx context.Context, rps []*entity.RolePermission) error
	DeleteByRole(ctx context.Context, tenantID, roleID string) error
	DeleteByPermission(ctx context.Context, permissionID string) (int64, error)
	SetForRole(ctx context.Context, tenantID, roleID string, permissionIDs []string) error

	ListByRole(ctx context.Context, tenantID, roleID string) ([]*entity.RolePermission, error)
	ListByRoles(ctx context.Context, tenantID string, roleIDs []string) ([]*entity.RolePermission, error)
	ListByTenant(ctx context.Context, tenantID string) ([]*entity.RolePermission, error)
}
