/*
 This file is part of GNU Taler
 (C) 2026 Taler Systems S.A.

 GNU Taler is free software; you can redistribute it and/or modify it under the
 terms of the GNU General Public License as published by the Free Software
 Foundation; either version 3, or (at your option) any later version.

 GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

 You should have received a copy of the GNU General Public License along with
 GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */

import test from "ava";
import { deriveTopsAmlEvents } from "./events.js";

test("AML event derivation for TOPS, unknown form", (t) => {
  const events = deriveTopsAmlEvents("some_unknown_form", {}, {}, {});
  t.deepEqual([...events], []);
});

test("AML event derivation for TOPS, vqf_902_1_officer", (t) => {
  {
    const events = deriveTopsAmlEvents(
      "vqf_902_1_officer",
      {},
      {},
      {
        ACCOUNT_OPEN: true,
      },
    );
    t.deepEqual([...events], ["INCR_ACCOUNT_OPEN"]);
  }

  {
    // Already open, no event
    const events = deriveTopsAmlEvents(
      "vqf_902_1_officer",
      {},
      {
        ACCOUNT_OPEN: true,
      },
      {
        ACCOUNT_OPEN: true,
      },
    );
    t.deepEqual([...events], []);
  }

  {
    const events = deriveTopsAmlEvents(
      "vqf_902_1_officer",
      {},
      {},
      {
        ACCOUNT_OPEN: true,
        PEP_FOREIGN: true,
      },
    );
    t.deepEqual(
      [...events],
      ["INCR_ACCOUNT_OPEN", "INCR_PEP", "INCR_PEP_FOREIGN"],
    );
  }
});

test("AML event derivation for TOPS, vqf_902_4", (t) => {
  {
    // Account not open => no event
    const events = deriveTopsAmlEvents(
      "vqf_902_4",
      {},
      {},
      {
        PEP_FOREIGN: true,
      },
    );
    t.deepEqual([...events], []);
  }
  {
    const events = deriveTopsAmlEvents(
      "vqf_902_4",
      {},
      {
        ACCOUNT_OPEN: true,
      },
      {
        PEP_FOREIGN: true,
      },
    );
    t.deepEqual([...events], ["INCR_PEP", "INCR_PEP_FOREIGN"]);
  }
  {
    const events = deriveTopsAmlEvents(
      "vqf_902_4",
      {},
      {
        ACCOUNT_OPEN: true,
        PEP_FOREIGN: true,
      },
      {
        PEP_FOREIGN: false,
      },
    );
    t.deepEqual([...events], ["DECR_PEP", "DECR_PEP_FOREIGN"]);
  }
});
