import assert from "node:assert/strict";
import test from "node:test";
import { extractHealthPatch } from "@/lib/mortgage/health";
import { mergeProfile } from "@/lib/mortgage/extract";
import { emptyProfile, type ApplicantProfile } from "@/lib/mortgage/schema";

function modules(p: ApplicantProfile) {
  return (p.impairments || []).map((i) => i.module).sort();
}

function apply(message: string) {
  return mergeProfile(emptyProfile(), extractHealthPatch(message));
}

test("1. diabetes with cancer both land on the health profile", () => {
  const p = apply("I have Type 2 diabetes and I also had cancer in 2018");
  assert.equal(p.disease_screens?.diabetes, "yes");
  assert.equal(p.disease_screens?.cancer, "yes");
  assert.deepEqual(modules(p), ["cancer", "diabetes"]);
  const dm = (p.impairments || []).find((i) => i.module === "diabetes");
  assert.equal(dm?.attributes.type, "Type 2");
  const ca = (p.impairments || []).find((i) => i.module === "cancer");
  assert.equal(ca?.attributes.disclosed, true);
});

test("2. diabetes with lung issue stores diabetes and lung", () => {
  const p = apply("I have diabetes and a lung issue — COPD and I use an inhaler");
  assert.equal(p.disease_screens?.diabetes, "yes");
  assert.equal(p.disease_screens?.lung, "yes");
  assert.ok(modules(p).includes("diabetes"));
  assert.ok(modules(p).includes("lung"));
});

test("3. cancer with kidney problem stores both modules", () => {
  const p = apply("I had cancer and I also have a kidney problem; my doctor mentioned dialysis");
  assert.equal(p.disease_screens?.cancer, "yes");
  assert.equal(p.disease_screens?.kidney, "yes");
  assert.deepEqual(modules(p), ["cancer", "kidney"]);
});

test("5. diabetes plus kidney dialysis from health knowledge_base", () => {
  const p = apply("Type 2 diabetes and I am on dialysis for kidney failure");
  assert.equal(p.disease_screens?.diabetes, "yes");
  assert.equal(p.disease_screens?.kidney, "yes");
});

test("6. heart plus disabled lupus in one disclosure", () => {
  const p = apply("I had a stent and I also have lupus");
  assert.equal(p.disease_screens?.heart, "yes");
  assert.equal(p.disease_screens?.disabled, "yes");
});

test("4. cancer with heart problem stores both modules", () => {
  const p = apply("I have cancer and a heart problem with a stent last year");
  assert.equal(p.disease_screens?.cancer, "yes");
  assert.equal(p.disease_screens?.heart, "yes");
  assert.deepEqual(modules(p), ["cancer", "heart"]);
});
