import assert from 'node:assert/strict';
import { test } from 'node:test';
import { CDC_TRANSLATIONS, CEFP_TRANSLATIONS } from './index';
import { cdcIssueFormKeys, resolveCdcIssueFormDictionary } from '../../../../frontend/features/cdc/cdc-issue-matrix/components/cdc-issue-form-translations';

test('shared edit form uses the owning module dictionary and preserves form/column separation', () => {
  for (const [page, seeds] of [['cdc_issue_matrix', CDC_TRANSLATIONS], ['cefp_issue_matrix', CEFP_TRANSLATIONS]] as const) {
    const keys = new Set(seeds.filter(row => row.page === page).map(row => row.translationKey));
    for (const key of Object.values(cdcIssueFormKeys)) assert.ok(keys.has(key), `${page}/${key}`);
  }
  const api = {
    'form.edit_issue.title': 'CDC edited title',
    'form.button.save_changes': 'CDC edited save',
    'form.issue.label': 'CDC form field',
    'column.issue': 'CDC table field',
  };
  const dictionary = resolveCdcIssueFormDictionary(api);
  assert.equal(dictionary['form.edit_issue'], 'CDC edited title');
  assert.equal(dictionary['form.save_changes'], 'CDC edited save');
  assert.equal(dictionary['column.issue'], 'CDC form field');
  assert.equal(api['column.issue'], 'CDC table field');
  assert.equal(resolveCdcIssueFormDictionary({ 'column.issue': 'Table only' })['column.issue'], undefined);
});

const required = [
  'exporting',
  'status.solved', 'status.in_progress', 'status.not_addressed',
  'status.draft', 'status.saved', 'status.new_submission',
  'status.select', 'status.loading',
  'action.more', 'action.edit', 'action.remove',
  'pagination.previous', 'pagination.next',
  'detail.loading', 'detail.not_found', 'detail.no_document',
  'error.load', 'detail.load_error',
];

test('CDC and CEFP shared issue matrix have independent bilingual UI seeds', () => {
  for (const [module, page, all] of [
    ['cdc', 'cdc_issue_matrix', CDC_TRANSLATIONS],
    ['cefp', 'cefp_issue_matrix', CEFP_TRANSLATIONS],
  ] as const) {
    const rows = all.filter((row) => row.page === page);
    assert.equal(new Set(rows.map((row) => row.translationKey)).size, rows.length);
    for (const key of required) {
      const item = rows.find((row) => row.translationKey === key);
      assert.ok(item, `${module}/${page}/${key}`);
      assert.equal(item.module, module);
      assert.ok(item.englishText.trim());
      assert.ok(item.khmerText.trim());
    }
  }
});
