import { deriveLinkTagNames, isAutoTagGroupName } from './auto-tag-rules';

describe('auto-tag-rules / deriveLinkTagNames', () => {
  it('单面印花 + 包邮 + 无工艺关键字 → 单面印花/烫画/包邮', () => {
    expect(
      deriveLinkTagNames('美国（包邮）180g纯棉T恤成人款-DG001-单面印花'),
    ).toEqual(['单面印花', '烫画', '包邮']);
  });

  it('双面印花 + 不包邮 → 双面印花/烫画/不包邮', () => {
    expect(
      deriveLinkTagNames('美国（不包邮）180g纯棉T恤成人款-DG001-双面印花·美东新泽西仓'),
    ).toEqual(['双面印花', '烫画', '不包邮']);
  });

  it('工艺段写法「直喷双面/直喷单面」→ 裸 双面/单面 也归入印花数量', () => {
    expect(
      deriveLinkTagNames('日本（包邮）200g纯棉T恤-JPTM001-直喷双面'),
    ).toEqual(['双面印花', '直喷', '包邮']);
    expect(
      deriveLinkTagNames('日本（包邮）200g纯棉T恤-JPTM001-直喷单面'),
    ).toEqual(['单面印花', '直喷', '包邮']);
  });

  it('不打印 + 光板（物流备注）+ 不包邮 → 归并为单个 不打印 工艺标签（光板即不打印）', () => {
    expect(
      deriveLinkTagNames('美国（不包邮光板）180GT恤成人款-JSA002-不打印·美西洛杉矶二仓'),
    ).toEqual(['不打印', '不包邮']);
  });

  it('仅光板（无不打印字样）同样归为 不打印', () => {
    expect(deriveLinkTagNames('美国（包邮光板）T恤-DG001')).toEqual(['不打印', '包邮']);
  });

  it('直喷命中时不给默认烫画；名称未写单/双面时印花数量默认单面印花', () => {
    expect(deriveLinkTagNames('美国（包邮）卫衣-DG002-直喷')).toEqual(['单面印花', '直喷', '包邮']);
  });

  it('不打印/光板（无印花面）不补默认印花数量', () => {
    expect(deriveLinkTagNames('美国（不包邮光板）T恤-DG001-不打印')).toEqual(['不打印', '不包邮']);
  });

  it('物流备注既无包邮也无不包邮时不下发物流标签', () => {
    const names = deriveLinkTagNames('美国（快递）卫衣-DG002-单面印花');
    expect(names).toContain('单面印花');
    expect(names).toContain('烫画');
    expect(names).not.toContain('包邮');
    expect(names).not.toContain('不包邮');
  });

  it('空名称返回空数组', () => {
    expect(deriveLinkTagNames(null)).toEqual([]);
    expect(deriveLinkTagNames('')).toEqual([]);
  });

  it('先判「不包邮」再判「包邮」，避免子串误命中', () => {
    const names = deriveLinkTagNames('美国（不包邮）T恤-DG001-单面印花');
    expect(names).toContain('不包邮');
    expect(names).not.toContain('包邮');
  });
});

describe('auto-tag-rules / isAutoTagGroupName', () => {
  it('命中真实派生组：物流渠道 / 印刷工艺 / 印花数量 / 印刷位置', () => {
    expect(isAutoTagGroupName('物流渠道')).toBe(true);
    expect(isAutoTagGroupName('印刷工艺')).toBe(true);
    expect(isAutoTagGroupName('印花数量')).toBe(true);
    expect(isAutoTagGroupName('印刷位置')).toBe(true);
  });

  it('其他分组不视为自动组', () => {
    expect(isAutoTagGroupName('潮流')).toBe(false);
    expect(isAutoTagGroupName('场景')).toBe(false);
  });
});
