import { buildPrototypeContext } from './prototype-context';

describe('buildPrototypeContext', () => {
  it('keeps QY note snippets and drops unrelated long text', () => {
    const longPrefix = '无关说明'.repeat(2000);
    const longSuffix = '页面噪声'.repeat(2000);
    const content = `${longPrefix} QY0007：支持手机号登录，需要验证码输入和倒计时。${longSuffix}`;

    const context = buildPrototypeContext(content, 800);

    expect(context.text).toContain('QY0007');
    expect(context.text).toContain('手机号登录');
    expect(context.text).not.toContain(longPrefix.slice(0, 200));
    expect(context.text.length).toBeLessThanOrEqual(900);
    expect(context.noteCount).toBe(1);
  });

  it('merges overlapping QY snippets instead of duplicating the same content', () => {
    const content = `${'P'.repeat(160)} QY0001 这里是第一个批注 ${'A'.repeat(180)} QY0002 这里是第二个批注 ${'B'.repeat(300)}`;

    const context = buildPrototypeContext(content, 1000);

    expect(context.text).toContain('QY0001');
    expect(context.text).toContain('QY0002');
    expect(context.text.length).toBeLessThan(800);
  });

  it('keeps snippets that match requirement code or summary even when they are far from QY notes', () => {
    const content = [
      `${'页面噪声'.repeat(600)} QY0001：登录按钮颜色改为蓝色。${'无关内容'.repeat(600)}`,
      'REA-20260629001：客户批量导入，支持上传 Excel 并生成客户档案。',
      `${'更多噪声'.repeat(600)}`,
    ].join(' ');

    const context = buildPrototypeContext(content, 900, {
      requirements: [
        {
          id: 'req-1',
          code: 'REA-20260629001',
          title: '客户批量导入',
          description: '上传 Excel 后生成客户档案',
        },
      ],
    });

    expect(context.text).toContain('QY0001');
    expect(context.text).toContain('REA-20260629001');
    expect(context.text).toContain('客户批量导入');
    expect(context.text).not.toContain('更多噪声'.repeat(20));
  });

  it('keeps clear user-information QY notes with actionable details', () => {
    const content = [
      '页面说明'.repeat(500),
      'QY0005用户信息化优化：离职状态员工用户名正常显示 优先级 / 范围：P1 · Web/App 详细说明 后端统一所有页面的人员姓名取值，不因离职、实习、停用等状态返回空或乱码。姓名显示长度放宽至20个汉字，前端超长以“...”截断，并提供点击或长按查看全名能力。案例列表、详情、主人翁选择器、排行榜等涉及姓名的位置同步修改。',
      'QY0019 人员选择优化：同名员工身份区分与主人翁筛选 所有人员选择器中，姓名后新增名片icon，点击可展示人员组织详情页。主人翁筛选框支持按名字模糊搜索，输入关键字实时过滤下拉列表。无匹配结果时显示“无结果”。',
      'QY0020 预入职人员支持 人员数据源新增“预入职”状态人员，由HR系统同步。主人翁选择器可搜索并选择预入职人员，其他交互与在职员工一致。预入职人员显示“预入职”标签或特殊标识。可搜索、选择预入职人员并成功创建案例。',
      '更多页面说明'.repeat(500),
    ].join(' ');

    const context = buildPrototypeContext(content, 1800);

    expect(context.text).toContain('QY0005');
    expect(context.text).toContain('离职状态员工用户名正常显示');
    expect(context.text).toContain('QY0019');
    expect(context.text).toContain('同名员工身份区分');
    expect(context.text).toContain('QY0020');
    expect(context.text).toContain('预入职人员支持');
  });
});
