//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
namespace MUnique.OpenMU.GameLogic.Views.CastleSiege;
///
/// Interface of a view which drives the client's on-map Castle Siege countdown (Season 6 protocol
/// C1 B2 17 = battle start/stop flag, C1 B2 1E = remaining hour/minute).
///
public interface ICastleSiegeStatusViewPlugIn : IViewPlugIn
{
///
/// Sends the siege battle start/stop flag (C1 B2 17). The client only ticks its countdown while this is set.
///
/// Whether the siege battle is running.
ValueTask SetBattleStateAsync(bool started);
///
/// Sends the remaining siege time as hour/minute (C1 B2 1E) to (re)seed the countdown.
///
/// The remaining hours.
/// The remaining minutes.
ValueTask SetTimerAsync(byte hour, byte minute);
///
/// Sends the castle owner guild's 32-byte logo (C1 B9 02) so the client paints it onto the castle flags.
///
/// The owner guild's 32-byte logo/emblem.
ValueTask SetCastleFlagAsync(ReadOnlyMemory guildLogo);
///
/// Drops (down = true) or raises (down = false) the shield/barrier over the crown (C1 B2 16).
/// The crown is only clickable/capturable while the shield is down.
///
/// Whether the shield should be down.
ValueTask SetCrownShieldAsync(bool down);
///
/// Sends the crown-hold registration state (C1 B2 15): state 0 = started/in-progress (starts the client's
/// 60-second countdown), 1 = success, 2 = failed/reset.
///
/// The registration state (0 progress, 1 success, 2 fail).
/// Accumulated hold time in milliseconds (client shows 60000 - this).
ValueTask SetCrownRegistAsync(byte state, uint accessMilliseconds);
///
/// Broadcasts that a guild registered the official seal / took the crown (C1 B2 18, state 1).
///
/// The capturing guild's name (max 8 bytes).
ValueTask AnnounceSealCapturedAsync(string guildName);
}