import test from 'node:test';
import assert from 'node:assert/strict';
import {
  applySkillGrantsToCapabilities,
  DEFAULT_USER_SKILLS,
  listPlatformSkillCatalog,
  normalizeSkillPatch,
  resolveSkillMap,
} from './skills-registry.mjs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';

const h5Root = path.dirname(fileURLToPath(import.meta.url));

test('lists static-page-publish in platform catalog', () => {
  const catalog = listPlatformSkillCatalog(h5Root);
  assert.ok(catalog.some((item) => item.name === 'static-page-publish'));
  assert.ok(catalog.some((item) => item.name === 'schedule-assistant'));
  assert.ok(catalog.some((item) => item.name === 'product-campaign-page'));
});

test('granting publish skill enables static_publish capability', () => {
  const caps = applySkillGrantsToCapabilities(
    { static_publish: false, skills: false },
    { 'static-page-publish': true },
  );
  assert.equal(caps.static_publish, true);
  assert.equal(caps.skills, true);
});

test('resolveSkillMap prefers user overrides', () => {
  const catalog = listPlatformSkillCatalog(h5Root);
  const resolved = resolveSkillMap(
    { 'static-page-publish': false },
    { 'static-page-publish': true },
    catalog,
  );
  assert.equal(resolved['static-page-publish'], true);
});

test('normalizeSkillPatch ignores unknown skills', () => {
  const catalog = listPlatformSkillCatalog(h5Root);
  assert.deepEqual(normalizeSkillPatch(catalog, { unknown: true }), {});
});

test('DEFAULT_USER_SKILLS enables common platform skills', () => {
  assert.equal(DEFAULT_USER_SKILLS.web, true);
  assert.equal(DEFAULT_USER_SKILLS.search, true);
  assert.equal(DEFAULT_USER_SKILLS['schedule-assistant'], true);
  assert.equal(DEFAULT_USER_SKILLS['form-builder'], true);
  assert.equal(DEFAULT_USER_SKILLS['table-viewer'], true);
  assert.equal(DEFAULT_USER_SKILLS['product-campaign-page'], true);
  assert.equal(DEFAULT_USER_SKILLS['static-page-publish'], false);
});
