import test from "node:test";
import assert from "node:assert/strict";
import { ModeratorGuard } from "../src/moderation/ModeratorGuard.ts";
import type { ChannelStatus } from "../src/types.ts";

const channel: ChannelStatus = {
  channel_id: 1,
  streamer_id: 2,
  kick_channel_id: "10",
  kick_user_id: "20",
  kick_chatroom_id: "30",
  slug: "demo",
  display_name: "Demo",
  live_status: "online",
  moderator_status: "not_added"
};

test("une sanction est bloquée sans rôle modérateur confirmé", () => {
  const guard = new ModeratorGuard();
  assert.throws(() => guard.assertAllowed(channel, { kick_user_id: "99", username: "viewer", roles: [] }, false), /rôle fiIyx/);
});

test("le propriétaire reste protégé même quand le bot est modérateur", () => {
  const guard = new ModeratorGuard();
  assert.throws(() => guard.assertAllowed({ ...channel, moderator_status: "moderator" }, { kick_user_id: "20", username: "owner", roles: ["owner"] }, false), /propriétaire/);
});

test("le mode simulation ne sanctionne pas et laisse produire un diagnostic", () => {
  const guard = new ModeratorGuard();
  assert.doesNotThrow(() => guard.assertAllowed(channel, { kick_user_id: "99", username: "viewer", roles: [] }, true));
});

