import assert from 'node:assert/strict';
import test from 'node:test';
import { MINISTRY_TRANSLATIONS, CDCGPSF_TRANSLATIONS } from './index';
import { SHARED_MEETING_REQUEST_LABELS } from './shared-meeting-request-labels.seed';
import { cdcGpsfMeetingCalendarMessages } from '../../../../frontend/features/cdc-gpsf/meeting-calendar/cdc-gpsf-meeting-calendar-i18n';
import { meetingTranslationPage, fetchMinistryMeetingRequestDictionary } from '../../../../frontend/features/ministry/meeting-request/meeting-request-translations';

test('Calendar page owns all shared bilingual labels under its own title', () => {
  for (const items of [MINISTRY_TRANSLATIONS, CDCGPSF_TRANSLATIONS]) {
    const rows = items.filter(row => row.page === 'meeting_calendar');
    assert.equal(rows.length, SHARED_MEETING_REQUEST_LABELS.length + 1 + (items === CDCGPSF_TRANSLATIONS ? Object.keys(cdcGpsfMeetingCalendarMessages.en).length : 0));
    assert.equal(new Set(rows.map(row => row.translationKey)).size, rows.length);
    for (const row of rows) {
      assert.ok(row.englishText.trim()); assert.ok(row.khmerText.trim());
      if (row.translationKey !== 'title') assert.deepEqual(row.parent, { module: row.module, page: 'meeting_calendar', translationKey: 'title' });
    }
  }
});
test('route selects independent calendar or request dictionaries and API page', async () => {
  assert.equal(meetingTranslationPage('/ministry/meeting-calendar'), 'meeting_calendar');
  assert.equal(meetingTranslationPage('/cdc-gpsf/meeting-calendar'), 'meeting_calendar');
  assert.equal(meetingTranslationPage('/pswg/meeting-requests'), 'meeting_requests');
  assert.equal(meetingTranslationPage('/ministry/meeting-requests/123'), 'meeting_requests');
  const original = globalThis.fetch;
  try {
    globalThis.fetch = async input => {
      const url = new URL(String(input));
      assert.equal(url.searchParams.get('page'), 'meeting_calendar');
      assert.equal(url.searchParams.get('module'), 'ministry');
      return Response.json({ data: { translations: { 'meeting_calendar.title': 'Admin calendar' } } });
    };
    assert.equal((await fetchMinistryMeetingRequestDictionary('km', undefined, 'ministry', 'meeting_calendar'))['meeting_calendar.title'], 'Admin calendar');
  } finally { globalThis.fetch = original; }
});
