import { listAppsUseCase } from "./listAppsUseCase";
import Transport from "@ledgerhq/hw-transport";
import { DeviceInfo } from "@ledgerhq/types-live";
import { HttpManagerApiRepository } from "@ledgerhq/device-core";
import * as listAppsModule from "../../apps/listApps";

jest.mock("../../apps/listApps", () => ({
  ...jest.requireActual("../../apps/listApps"),
  listApps: jest.fn(),
}));

jest.mock("@ledgerhq/live-env", () => {
  const actual = jest.requireActual("@ledgerhq/live-env");
  const { getEnv } = actual;
  return {
    ...actual,
    getEnv: jest.fn().mockImplementation((key: string) => {
      switch (key) {
        case "DEVICE_PROXY_MODEL":
          return "mockDeviceProxyModel";
        case "FORCE_PROVIDER":
          return 123;
        case "MANAGER_DEV_MODE":
          return false;
        default:
          return getEnv(key);
      }
    }),
  };
});

describe("listAppsUseCase", () => {
  const mockedListApps = jest.mocked(listAppsModule.listApps);

  beforeEach(() => {
    jest.clearAllMocks();
  });

  it("should call listApps with the correct parameters", () => {
    listAppsUseCase({} as Transport, {} as DeviceInfo);

    expect(mockedListApps).toHaveBeenCalledWith({
      transport: {},
      deviceInfo: {},
      deviceProxyModel: "mockDeviceProxyModel",
      managerApiRepository: expect.any(HttpManagerApiRepository),
      forceProvider: 123,
      managerDevModeEnabled: false,
    });
  });
});
