import { describe, test } from 'node:test';
import assert from 'node:assert/strict';
import { markdownToHtml, inline } from '../build-html.mjs';

describe('markdownToHtml — tables (beslutning H)', () => {
  test('converts a pipe table to <table>/<tr>/<td>', () => {
    const md = [
      '| Plattform | Pris |',
      '| --- | --- |',
      '| Azure | Høy |',
      '| Foundry | Lav |',
    ].join('\n');
    const html = markdownToHtml(md);
    assert.match(html, /<table>/);
    assert.match(html, /<tr>/);
    assert.match(html, /<td>/);
    // header cells render as <th>, body values as <td>
    assert.match(html, /<th>Plattform<\/th>/);
    assert.match(html, /<td>Azure<\/td>/);
    // the separator row must NOT become a data row
    assert.doesNotMatch(html, /<td>---<\/td>/);
  });

  test('empty input produces no table', () => {
    assert.doesNotMatch(markdownToHtml(''), /<table>/);
  });

  test('tolerates a malformed row (uneven cell count) without throwing', () => {
    const md = [
      '| a | b |',
      '| --- | --- |',
      '| only-one-cell |',
      '| x | y |',
    ].join('\n');
    let html;
    assert.doesNotThrow(() => { html = markdownToHtml(md); });
    assert.match(html, /<table>/);
    assert.match(html, /<td>x<\/td>/);
  });
});

describe('markdownToHtml — heading levels # … #### (beslutning H)', () => {
  test('# renders <h1>', () => {
    assert.match(markdownToHtml('# Tittel'), /<h1>Tittel<\/h1>/);
  });
  test('## renders <h2>', () => {
    assert.match(markdownToHtml('## Seksjon'), /<h2>Seksjon<\/h2>/);
  });
  test('### renders <h3>', () => {
    assert.match(markdownToHtml('### Under'), /<h3>Under<\/h3>/);
  });
  test('#### renders <h4>', () => {
    assert.match(markdownToHtml('#### Detalj'), /<h4>Detalj<\/h4>/);
  });
});

describe('inline — backtick code span (beslutning H)', () => {
  test('`code` renders <code>', () => {
    assert.match(inline('bruk `npm install` her'), /<code>npm install<\/code>/);
  });
  test('still handles **bold** and *italic*', () => {
    assert.match(inline('**fet** og *kursiv*'), /<strong>fet<\/strong>/);
    assert.match(inline('**fet** og *kursiv*'), /<em>kursiv<\/em>/);
  });
});
