using LightlessSync.API.Dto.Chat;

namespace LightlessSync.Services.Chat;

public sealed record ChatMessageEntry(
    ChatMessageDto? Payload,
    string DisplayName,
    bool FromSelf,
    DateTime ReceivedAtUtc,
    ChatSystemEntry? SystemMessage = null)
{
    public bool IsSystem => SystemMessage is not null;
}

public enum ChatSystemEntryType
{
    ZoneSeparator
}

public sealed record ChatSystemEntry(ChatSystemEntryType Type, string? ZoneName);

public readonly record struct ChatChannelSnapshot(
    string Key,
    ChatChannelDescriptor Descriptor,
    string DisplayName,
    ChatChannelType Type,
    bool IsConnected,
    bool IsAvailable,
    string? StatusText,
    bool HasUnread,
    int UnreadCount,
    IReadOnlyList<ChatMessageEntry> Messages);

public readonly record struct ChatReportResult(bool Success, string? ErrorMessage);