// tests/i18n/manifest-i18n.test.ts — Plan 01-12 Wave 0 RED unit test.
//
// Asserts manifest.json migrated to chrome i18n placeholders with
// default_locale='en' + _locales/{en,ru}/messages.json carrying the
// D-07 + D-08 canonical strings.
//
// Polarity at Wave 0 land: RED across the board (manifest.name still
// 'AI Call Recorder'; no default_locale; no _locales/). Flips GREEN
// after Wave 3 Task 1 migrates manifest + lands messages.json files.
//
// References:
//   - RESEARCH §10 + §11 (Chrome i18n schema; __MSG_* placeholder rules)
//   - brand-decisions-v1.md D-07 override (`Mokosh — Session Capture`)
//   - brand-decisions-v1.md D-08 tagline (`Thirty seconds ago, always at hand.`)

import { describe, expect, it } from 'vitest';
import { existsSync, readFileSync } from 'node:fs';
import { resolve as resolvePath } from 'node:path';

const MANIFEST_PATH = resolvePath(process.cwd(), 'manifest.json');
const EN_LOCALE_PATH = resolvePath(process.cwd(), '_locales/en/messages.json');
const RU_LOCALE_PATH = resolvePath(process.cwd(), '_locales/ru/messages.json');

interface I18nEntry {
  message: string;
  description?: string;
}

type LocaleFile = Record<string, I18nEntry>;

describe('Plan 01-12: manifest i18n migration (__MSG_*__ + default_locale)', () => {
  it('manifest.json:name === "__MSG_extName__" (i18n placeholder)', () => {
    const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
    expect(manifest.name).toBe('__MSG_extName__');
  });

  it('manifest.json:description === "__MSG_extDesc__"', () => {
    const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
    expect(manifest.description).toBe('__MSG_extDesc__');
  });

  it('manifest.json:default_locale === "en"', () => {
    const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
    expect(manifest.default_locale).toBe('en');
  });

  it('manifest.json:action.default_title === "__MSG_tooltipOff__"', () => {
    const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
    expect(manifest.action?.default_title).toBe('__MSG_tooltipOff__');
  });
});

describe('Plan 01-12: _locales/en/messages.json (default_locale fallback)', () => {
  it('_locales/en/messages.json exists + parses', () => {
    expect(existsSync(EN_LOCALE_PATH), `Expected ${EN_LOCALE_PATH}`).toBe(true);
    const en = JSON.parse(readFileSync(EN_LOCALE_PATH, 'utf8'));
    expect(typeof en).toBe('object');
  });

  it('en:extName === "Mokosh — Session Capture" (D-07 override)', () => {
    const en: LocaleFile = JSON.parse(readFileSync(EN_LOCALE_PATH, 'utf8'));
    expect(en.extName?.message).toBe('Mokosh — Session Capture');
  });

  it('en:extDesc === "Thirty seconds ago, always at hand." (D-08 tagline)', () => {
    const en: LocaleFile = JSON.parse(readFileSync(EN_LOCALE_PATH, 'utf8'));
    expect(en.extDesc?.message).toBe('Thirty seconds ago, always at hand.');
  });
});

describe('Plan 01-12: _locales/ru/messages.json (primary operator locale)', () => {
  it('_locales/ru/messages.json exists + parses', () => {
    expect(existsSync(RU_LOCALE_PATH), `Expected ${RU_LOCALE_PATH}`).toBe(true);
    const ru = JSON.parse(readFileSync(RU_LOCALE_PATH, 'utf8'));
    expect(typeof ru).toBe('object');
  });

  it('ru:extName === "Mokosh — Запись сессии"', () => {
    const ru: LocaleFile = JSON.parse(readFileSync(RU_LOCALE_PATH, 'utf8'));
    expect(ru.extName?.message).toBe('Mokosh — Запись сессии');
  });

  it('ru:extDesc === "Тридцать секунд назад, всегда под рукой."', () => {
    const ru: LocaleFile = JSON.parse(readFileSync(RU_LOCALE_PATH, 'utf8'));
    expect(ru.extDesc?.message).toBe('Тридцать секунд назад, всегда под рукой.');
  });
});
