using Application.Abstractions.Chat;

namespace Application.Abstractions.Hub;

/// <summary>
/// AppHub 클라이언트 인터페이스 — 모든 페이지에서 사용하는 공통 Hub
/// 접속자 추적 + 채팅 + 알림 + 쪽지 + 크루 초대/동의/toast
/// </summary>
public interface IAppHubClient
{
    // ── 채팅 (기존 ChatHub 통합) ──────────────────────────────────
    Task ReceiveMessage(ChatMessage message);
    Task ReceiveHistory(IReadOnlyList<ChatMessage> messages);
    Task ReceiveSystemMessage(string message);
    Task ReceiveParticipantCount(int count);
    Task ReceiveParticipants(IReadOnlyList<ChatParticipant> participants);
    Task Connected(string message);
    Task Logout(string message);
    Task Kick();

    // ── 알림 + 쪽지 ──────────────────────────────────────────────
    Task ReceiveNotification(object notification);
    Task ReceiveNote(object notePreview);
    Task ReceiveUnreadCounts(int notificationCount, int noteCount);

    // ── 채널 상태 (PubSub 기반 실시간) ─────────────────────────
    Task ReceiveChannelStatus(object channelStatus);

    // ── 크루 ─────────────────────────────────────────────────────
    Task ReceiveCrewInvitation(object invitation);
    Task ReceiveCrewConsentUpdate(object consentStatus);
    Task ReceiveCrewStarted(object sessionInfo);
    Task ReceiveCrewEnded(object sessionResult);
    Task ReceiveCrewToast(object toastData);
}