import { BaseAsset } from "../../../model/assets-model.js";
import { KindEnums } from "@apic/api-model/common/StudioEnums.js";
import { AssetCacheModel } from "../../../model/asset-cache-model.js";
import { getRefsFromMockEndpointAsset } from "./mockEndpoint-kind-helper.js";

jest.mock('../../common/message-helper.js', () => ({
	showWarning: jest.fn(),
}));

const mockEndpointAsset: BaseAsset = {
  spec: {
    config: [
      {
        condition: "($request.path equals v2/pet and $request.method equals GET and $request.query.<key1> equals 'test')",
        response: {
          $ref: "sample:api_response:2.0",
        },
      },
      {
        condition: "($request.path equals v2/pet and $request.method equals POST and $request.query.<key1> equals 'test' and $request.body.<val>)",
        response: {
          $ref: "sample:api_response1:2.0",
        },
      },
      {
        condition: "default",
        response: {
          $ref: "sample:api_response2:2.0",
        },
      },
    ],
  },
} as unknown as BaseAsset;

describe("getRefsFromMockEndpointAsset", () => {
  it.skip("should return AssetCacheModel with mock-response refs", () => {
    const result: AssetCacheModel[] = getRefsFromMockEndpointAsset(mockEndpointAsset);

    expect(result).toEqual([
      {
        kind: KindEnums.MockResponse,
        ref: "sample:api_response:2.0",
        isNewlyAdded: true,
      },
      {
        kind: KindEnums.MockResponse,
        ref: "sample:api_response1:2.0",
        isNewlyAdded: true,
      },
      {
        kind: KindEnums.MockResponse,
        ref: "sample:api_response2:2.0",
        isNewlyAdded: true,
      },
    ]);
  });

  it.skip("should not add duplicate refs to result", () => {
    const duplicateMockEndpointAsset: BaseAsset = {
      spec: {
        config: [
          {
            response: {
              $ref: "sample:api_response:2.0",
            },
          },
          {
            response: {
              $ref: "sample:api_response:2.0",
            },
          },
        ],
      },
    } as unknown as BaseAsset;

    const result: AssetCacheModel[] = getRefsFromMockEndpointAsset(duplicateMockEndpointAsset);

    expect(result).toEqual([
      {
        kind: KindEnums.MockResponse,
        ref: "sample:api_response:2.0",
        isNewlyAdded: true,
      },
    ]);
  });

  it.skip("should return an empty array when there are no response refs", () => {
    const emptyMockEndpointAsset: BaseAsset = {
      spec: {
        config: [
          {}
        ],
      },
    } as unknown as BaseAsset;

    const result: AssetCacheModel[] = getRefsFromMockEndpointAsset(emptyMockEndpointAsset);

    expect(result).toEqual([]);
  });

  it.skip("should handle asset with missing or undefined config", () => {
    const missingConfigMockEndpointAsset: BaseAsset = {
      spec: {},
    } as unknown as BaseAsset;

    const result: AssetCacheModel[] = getRefsFromMockEndpointAsset(missingConfigMockEndpointAsset);

    expect(result).toEqual([]);
  });
});
