import { toInsightReportV2 } from './insight-report-v2';

/**
 * ddx `revision7-v1`(2026-10-29, 클라이언트 확인 전 초안) 세일즈 카드 새 필드의 투영.
 *
 *   - `salesTip.sections[].scripts[].priorityScore` — 우선순위 점수, 소수 둘째 자리
 *   - `salesTip.sections[].scripts[].importance` — `{tier, labelKo, pinned, reasonsKo, rule}`, 고객 CRM 은 `null`
 *
 * 합성 report 를 손으로 짓는다(revision6 spec 과 같은 이유). 값은 ddx 샘플 응답 `ai-insight-sample-response.json` 의
 * 세일즈 카드 모양 그대로이고, 고정 카드가 점수 높은 카드보다 앞인 순서는 ddx `test_themes.py` 의 고정 정렬 사례에서 왔다.
 */

const sales = [
  {
    findingId: 'F-1',
    priorityScore: 21.9,
    importance: {
      tier: 1,
      labelKo: '중대질환',
      pinned: true,
      reasonsKo: ['암 코드', '반복 진료'],
      rule: 'exposure-v3-draft',
    },
  },
  {
    findingId: 'F-2',
    priorityScore: 35.97,
    importance: {
      tier: 2,
      labelKo: '주요 이력',
      pinned: false,
      reasonsKo: ['입원'],
      rule: 'exposure-v3-draft',
    },
  },
];
const r7 = {
  salesTip: {
    sections: [
      { key: 'sales', scripts: sales },
      {
        key: 'crm',
        scripts: [{ findingId: 'F-1', priorityScore: null, importance: null }],
      },
    ],
  },
};

describe('toInsightReportV2 — revision7-v1 (중요도 · 고정 순서)', () => {
  it('revision7 — 점수는 소수 그대로, importance 는 다섯 키 그대로, 순서는 받은 대로 선다', () => {
    const [a, b] = toInsightReportV2(r7)?.salesTip.sections[0].scripts ?? [];
    //* 고정 카드(21.90)가 점수 높은 카드(35.97)보다 앞이다 — 투영이 점수로 다시 세우지 않는다.
    expect([
      a.findingId,
      a.priorityScore,
      b.findingId,
      b.priorityScore,
    ]).toEqual(['F-1', 21.9, 'F-2', 35.97]);
    expect(a.importance).toEqual(sales[0].importance);
    expect(b.importance).toEqual(sales[1].importance);
  });

  it('revision7 — CRM · 이전 판 · 형이 틀린 값은 null 이고 importance 에 모르는 키는 싣지 않는다', () => {
    const out = toInsightReportV2(r7);
    const [crm] = out?.salesTip.sections[1].scripts ?? [];
    expect([crm.priorityScore, crm.importance]).toEqual([null, null]);
    const old = toInsightReportV2({
      salesTip: { sections: [{ key: 'sales', scripts: [{ findingId: 'F' }] }] },
    });
    const [o] = old?.salesTip.sections[0].scripts ?? [];
    expect([o.priorityScore, o.importance]).toEqual([null, null]);
    const odd = toInsightReportV2({
      salesTip: {
        sections: [
          {
            key: 'sales',
            scripts: [
              { priorityScore: '45.50', importance: '중대질환' },
              {
                priorityScore: Number.NaN,
                importance: {
                  tier: '1',
                  pinned: 'true',
                  reasonsKo: '입원',
                  folded: true,
                  person: '__LEAK__',
                },
              },
            ],
          },
        ],
      },
    });
    const [x, y] = odd?.salesTip.sections[0].scripts ?? [];
    expect([x.priorityScore, x.importance, y.priorityScore]).toEqual([
      null,
      null,
      null,
    ]);
    expect(y.importance).toEqual({
      tier: null,
      labelKo: null,
      pinned: null,
      reasonsKo: [],
      rule: null,
    });
    expect(JSON.stringify(odd)).not.toContain('__LEAK__');
  });

  it('revision7 — 점수 근거(priority)는 질병 부분 · 신뢰도 · 이력 항목만 싣고, 없으면 null', () => {
    const [x, y] =
      toInsightReportV2({
        salesTip: {
          sections: [
            {
              key: 'sales',
              scripts: [
                {
                  findingId: 'F-1',
                  priority: {
                    score: 38.25,
                    disease: 15,
                    group: '뇌경색 · 뇌졸중',
                    diseasePart: 30,
                    reliability: { factor: 1, reasons: ['3차 기관', '반복 진료'], tier: '3차' },
                    history: { visits: 2, test: 1.25, surgery: 0, bad: 'x' },
                    historyTotal: 8.25,
                    weightsBasis: '__LEAK__',
                  },
                },
                { findingId: 'F-2' },
              ],
            },
          ],
        },
      })?.salesTip.sections[0].scripts ?? [];
    expect(x.priority).toEqual({
      disease: 15,
      group: '뇌경색 · 뇌졸중',
      diseasePart: 30,
      reliability: 1,
      reliabilityReasons: ['3차 기관', '반복 진료'],
      history: { visits: 2, test: 1.25, surgery: 0 },
      historyTotal: 8.25,
    });
    expect(JSON.stringify(x)).not.toContain('__LEAK__');
    expect(y.priority).toBeNull();
  });
});
