import test from 'node:test';
import assert from 'node:assert/strict';
import {
  buildAutoChatSkillPrefix,
  buildChatSkillPrompt,
  CHAT_SKILL_DEFINITIONS,
  filterChatSkills,
} from './chat-skills.mjs';

test('filterChatSkills shows summarize and analyze without granted skills', () => {
  const visible = filterChatSkills(CHAT_SKILL_DEFINITIONS, { canPublish: false });
  assert.ok(visible.some((item) => item.id === 'summarize'));
  assert.ok(visible.some((item) => item.id === 'analyze'));
  assert.equal(visible.some((item) => item.id === 'generate-page'), false);
});

test('filterChatSkills gates platform skills by grantedSkills', () => {
  const visible = filterChatSkills(CHAT_SKILL_DEFINITIONS, {
    canPublish: false,
    grantedSkills: ['web', 'search'],
  });
  assert.ok(visible.some((item) => item.id === 'web-search'));
  assert.ok(visible.some((item) => item.id === 'code-search'));
  assert.equal(visible.some((item) => item.id === 'form-collect'), false);
  assert.equal(visible.some((item) => item.id === 'product-campaign-page'), false);
});

test('filterChatSkills shows product campaign page when granted', () => {
  const visible = filterChatSkills(CHAT_SKILL_DEFINITIONS, {
    canPublish: false,
    grantedSkills: ['product-campaign-page'],
  });
  assert.ok(visible.some((item) => item.id === 'product-campaign-page'));
});

test('filterChatSkills shows generate-page when publish is allowed', () => {
  const visible = filterChatSkills(CHAT_SKILL_DEFINITIONS, { canPublish: true });
  assert.ok(visible.some((item) => item.id === 'generate-page'));
});

test('buildChatSkillPrompt includes skill name for platform skills', () => {
  assert.match(buildChatSkillPrompt('web', 'web'), /请使用 web 技能/);
  assert.match(buildChatSkillPrompt('product-campaign-page'), /商品宣传 \/ 活动页/);
  assert.match(buildChatSkillPrompt('generate-page'), /static-page-publish/);
});

test('prefillOnly is set for open-ended chat skills', () => {
  assert.equal(CHAT_SKILL_DEFINITIONS.find((item) => item.id === 'web-search')?.prefillOnly, true);
  assert.equal(CHAT_SKILL_DEFINITIONS.find((item) => item.id === 'generate-page')?.prefillOnly, undefined);
});

test('buildAutoChatSkillPrefix enables web for news-like queries', () => {
  assert.match(
    buildAutoChatSkillPrefix('帮我搜索今天热点新闻', ['web', 'search']),
    /先搜索今天\/最新相关的新闻与热点/,
  );
  assert.equal(buildAutoChatSkillPrefix('帮我总结一下这段话', ['web', 'search']), '');
  assert.equal(buildAutoChatSkillPrefix('帮我搜索今天热点新闻', ['search']), '');
});
