/*
 * Copyright 2025 coze-dev Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
import { renderHook } from '@testing-library/react-hooks';
import {
  type BizCtx,
  ComponentType,
  TrafficScene,
} from '@coze-arch/bot-api/debugger_api';

import { type BasicMockSetInfo } from '@/interface';
import { useInitialGetEnabledMockSet } from '@/hooks/use-get-mockset';

vi.mock('@/const', () => ({
  IS_OVERSEA: true,
  MockTrafficEnabled: {
    DISABLE: 0,
    ENABLE: 1,
  },
}));

vi.mock('@coze-arch/bot-utils', () => ({
  safeJSONParse: JSON.parse,
}));

vi.mock('@coze-arch/logger', () => ({
  logger: {
    createLoggerWith: vi.fn(),
    error: vi.fn(),
    info: vi.fn(),
  },
  reporter: {
    createReporterWithPreset: vi.fn(),
  },
}));

vi.mock('@coze-arch/bot-api', () => ({
  debuggerApi: {
    MGetMockSetBinding: vi.fn().mockResolvedValue({
      code: 0,
      msg: '',
      mockSetBindings: [
        {
          mockSetID: '1',
          mockSubject: {
            componentID: 'tool1',
            componentType: ComponentType.CozeTool,
            parentComponentID: 'plugin1',
            parentComponentType: ComponentType.CozePlugin,
          },
          bizCtx: {
            bizSpaceID: '1',
            trafficCallerID: '1',
            trafficScene: TrafficScene.CozeSingleAgentDebug,
            connectorID: '1',
            connectorUID: '2',
          },
        },
      ],
      mockSetDetails: {
        '1': {
          id: '1',
          name: 'test-detail',
          mockSubject: {
            componentID: 'tool1',
            componentType: ComponentType.CozeTool,
            parentComponentID: 'plugin1',
            parentComponentType: ComponentType.CozePlugin,
          },
        },
      },
    }),
  },
}));

describe('mock-set-hooks', () => {
  it('fetch-mock-list', async () => {
    const TEST_COMMON_BIZ = {
      connectorID: '1',
      connectorUID: '2',
    };

    const TEST_BIZ_CTX1: BizCtx = {
      bizSpaceID: '1',
      trafficCallerID: '1',
      trafficScene: TrafficScene.CozeSingleAgentDebug,
    };

    const TEST_MOCK_SUBJECT = {
      componentID: 'tool1',
      componentType: ComponentType.CozeTool,
      parentComponentID: 'plugin1',
      parentComponentType: ComponentType.CozePlugin,
    };

    const singleAgentToolItem: BasicMockSetInfo = {
      bindSubjectInfo: TEST_MOCK_SUBJECT,
      bizCtx: {
        ...TEST_COMMON_BIZ,
        ...TEST_BIZ_CTX1,
      },
    };
    const { result } = renderHook(() =>
      useInitialGetEnabledMockSet({
        bizCtx: singleAgentToolItem.bizCtx,
        pollingInterval: 0,
      }),
    );

    const { start } = result.current;

    await start();
    const { data } = result.current;
    expect(data[0]?.mockSetBinding.mockSetID).toEqual('1');
    expect(data[0]?.mockSetDetail?.id).toEqual('1');
  });
});
