import { vi, type MockedFunction } from 'vitest';

import type { ThemeHooks } from '../../types/hooks';

export const useThemeHooks = vi.fn(() => ({
  useAnchorPositioning: vi.fn(() => ({
    isSupported: true,
  })),
  useTranslate: vi.fn(() => ({
    translate: vi.fn((key: string, defaultValue: string | { defaultValue: string }) =>
      defaultValue
        ? typeof defaultValue !== 'string'
          ? (defaultValue as { defaultValue: string }).defaultValue
          : defaultValue
        : key,
    ),
  })),
  useTelemetry: vi.fn(() => ({
    send: vi.fn(),
    sendCodeSnippetReportedMessage: vi.fn(),
    sendPageActionsButtonClickedMessage: vi.fn(),
    sendColorModeSwitchedMessage: vi.fn(),
  })),
  useBreadcrumbs: vi.fn().mockReturnValue({ breadcrumbs: [], siblings: undefined }),
  useBanner: vi.fn(() => ({
    banner: undefined,
    dismissBanner: vi.fn(),
  })),
  usePageSharedData: vi.fn().mockReturnValue({}),
  useCatalogClassic: vi.fn(() => ({
    groups: [],
    filters: [],
    filterTerm: '',
    setFilterTerm: vi.fn(),
  })),
  useL10n: vi.fn(() => ({
    changeLanguage: vi.fn(),
  })),
  useL10nConfig: vi.fn(() => ({
    currentLocale: 'en',
    defaultLocale: 'en',
    locales: [
      { code: 'en', name: 'English' },
      { code: 'fr', name: 'France' },
      { code: 'uk', name: 'Ukraine' },
    ],
  })),
  usePreloadHistory: vi.fn(() => ({
    push: vi.fn(),
  })),
  useCurrentProduct: vi.fn(),
  useProducts: vi.fn(() => []),
  useSearch: vi.fn(() => ({
    query: vi.fn().mockReturnValue(''),
    setQuery: vi.fn(),
    items: [],
    isLoading: false,
  })),
  useAiSearch: vi.fn(() => ({
    askQuestion: vi.fn(),
    isGeneratingResponse: false,
    question: '',
    response: undefined,
    resources: [],
    clearConversation: vi.fn(),
    error: null,
    conversation: [],
    setConversation: vi.fn(),
    toolCalls: [],
  })),
  useFacetQuery: vi.fn(() => ({
    searchFacet: null,
    setSearchFacet: vi.fn(),
    setSearchFacetQuery: vi.fn(),
  })),
  useMarkdownText: vi.fn(() => {
    return null;
  }),
  useUserMenu: vi.fn(() => ({
    userData: {
      isAuthenticated: true,
      name: 'test-name',
      email: 'test-email@test.xyz',
      picture: 'picture',
    },
    handleLogout: vi.fn(),
    loginUrl: 'https://login.redoc.ly',
    hasDeveloperOnboarding: true,
  })),
  usePageVersions: vi.fn(),
  useSidebarItems: vi.fn().mockReturnValue({
    currentItems: [
      {
        label: 'Item',
      },
    ],
    allSidebarItems: [
      {
        label: 'Item',
      },
    ],
    popDrilldownState: vi.fn(),
    pushDrilldownState: vi.fn(),
  }),
  useSidebarSiblingsData: vi.fn(),
  useSubmitFeedback: vi.fn(() => ({
    submitFeedback: vi.fn(),
  })),
  useLoadAndNavigate: vi.fn(),
  usePageProps: vi.fn().mockReturnValue({}),
  usePageData: vi.fn().mockReturnValue(null),
})) as unknown as MockedFunction<() => ThemeHooks>;
