using System.Collections.Immutable;
using MemoryPack;
using Phantom.Common.Data.Web.Users;

namespace Phantom.Common.Messages.Web.ToController;

[MemoryPackable(GenerateType.VersionTolerant)]
public sealed partial record ChangeUserRolesMessage(
	[property: MemoryPackOrder(0)] Guid LoggedInUserGuid,
	[property: MemoryPackOrder(1)] Guid SubjectUserGuid,
	[property: MemoryPackOrder(2)] ImmutableHashSet<Guid> AddToRoleGuids,
	[property: MemoryPackOrder(3)] ImmutableHashSet<Guid> RemoveFromRoleGuids
) : IMessageToController<ChangeUserRolesResult> {
	public Task<ChangeUserRolesResult> Accept(IMessageToControllerListener listener) {
		return listener.HandleChangeUserRoles(this);
	}
}