import test from "node:test";
import assert from "node:assert/strict";
import { parseInboundPayload, toChatMessage } from "../src/kick/KickWebhookEvent.ts";
import type { ChannelStatus, InboundKickEvent } from "../src/types.ts";

const channel: ChannelStatus = {
  channel_id: 7,
  streamer_id: 1,
  kick_channel_id: "channel-7",
  kick_user_id: "123",
  kick_chatroom_id: "room-7",
  slug: "streamer",
  display_name: "Streamer",
  live_status: "online",
  moderator_status: "moderator"
};

const event: InboundKickEvent = {
  id: 9,
  channel_id: 7,
  kick_message_id: "01TESTMESSAGE00000000000001",
  event_type: "chat.message.sent",
  event_version: "1",
  attempts: 1,
  payload_json: JSON.stringify({
    message_id: "message-1",
    content: "!hello",
    sender: {
      user_id: 456,
      username: "viewer",
      identity: { badges: [{ type: "moderator" }, { type: "subscriber" }] }
    },
    created_at: "2026-07-28T12:00:00Z"
  })
};

test("convertit un webhook officiel Kick en message interne", () => {
  const payload = parseInboundPayload(event);
  const message = toChatMessage(event, channel, payload);
  assert.equal(message?.content, "!hello");
  assert.equal(message?.sender.kick_user_id, "456");
  assert.deepEqual(message?.sender.roles, ["moderator", "subscriber"]);
});
