using SVSim.Database.Repositories.Guild;
using SVSim.Database.Services;

namespace SVSim.Database.Services.Guild;

public sealed class GuildChatService : IGuildChatService
{
    private readonly IGuildRepository _guilds;
    private readonly IGuildMemberRepository _members;
    private readonly IGuildInviteRepository _invites;
    private readonly IGuildJoinRequestRepository _joinRequests;
    private readonly IGuildChatMessageRepository _chatMessages;
    private readonly IGameConfigService _config;

    public GuildChatService(
        IGuildRepository guilds,
        IGuildMemberRepository members,
        IGuildInviteRepository invites,
        IGuildJoinRequestRepository joinRequests,
        IGuildChatMessageRepository chatMessages,
        IGameConfigService config)
    {
        _guilds = guilds;
        _members = members;
        _invites = invites;
        _joinRequests = joinRequests;
        _chatMessages = chatMessages;
        _config = config;
    }

    public Task<ChatWindow> GetWindowAsync(long viewerId, int startMessageId, int direction, int waitIntervalHint, CancellationToken ct = default)
        => throw new NotImplementedException();

    public Task<ChatPostResult> PostTextOrStampAsync(long viewerId, int type, string message, CancellationToken ct = default)
        => throw new NotImplementedException();

    public Task<ChatPostResult> PostDeckAsync(long viewerId, string deckPayloadJson, CancellationToken ct = default)
        => throw new NotImplementedException();

    public Task<bool> DeleteDeckAsync(long viewerId, int messageId, CancellationToken ct = default)
        => throw new NotImplementedException();

    public Task<ChatPostResult> PostReplayAsync(long viewerId, string replayPayloadJson, CancellationToken ct = default)
        => throw new NotImplementedException();

    public Task<string?> GetReplayDetailAsync(long viewerId, int messageId, CancellationToken ct = default)
        => throw new NotImplementedException();

    public Task<string?> GetDeckLogAsync(long viewerId, int messageId, CancellationToken ct = default)
        => throw new NotImplementedException();

    // No-op skeleton — will be wired in Phase 5.
    public Task EmitSystemEventAsync(int guildId, long actorViewerId, Entities.Guild.GuildChatMessageType type, string? body = null, CancellationToken ct = default)
        => Task.CompletedTask;
}
