//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
namespace MUnique.OpenMU.GuildServer;
using MUnique.OpenMU.Interfaces;
///
/// Interface for a publisher of guild related events.
///
public interface IGuildChangePublisher
{
///
/// Notifies the game server that a guild member got removed from a guild.
///
/// Name of the player which got removed from a guild.
ValueTask GuildPlayerKickedAsync(string playerName);
///
/// Notifies the game server that a guild got deleted.
///
/// The guild identifier.
ValueTask GuildDeletedAsync(uint guildId);
///
/// Assigns a guild to a player.
///
/// The server identifier.
/// Name of the character.
/// The status.
ValueTask AssignGuildToPlayerAsync(byte serverId, string characterName, GuildMemberStatus status);
///
/// Notifies game servers that an alliance was created (or a guild was added to an existing alliance).
///
/// The identifier of the alliance master guild.
/// The identifier of the newly added member guild.
ValueTask AllianceCreatedAsync(uint masterGuildId, uint memberGuildId);
///
/// Notifies game servers that a guild was removed from an alliance.
/// When master and member guild are the same, the whole alliance got disbanded.
///
/// The identifier of the alliance master guild.
/// The identifier of the removed member guild.
ValueTask AllianceDisbandedAsync(uint masterGuildId, uint memberGuildId);
///
/// Notifies game servers that the hostility between two guilds (or alliances) has changed.
///
/// The identifier of the first guild.
/// All guild IDs in the alliance of guild A (or just [guildIdA] if not in an alliance).
/// The identifier of the second guild.
/// All guild IDs in the alliance of guild B (or just [guildIdB] if not in an alliance).
/// true if the hostility was created; false if it was removed.
ValueTask GuildHostilityChangedAsync(uint guildIdA, IReadOnlyList allianceGuildIdsA, uint guildIdB, IReadOnlyList allianceGuildIdsB, bool created);
}