import {
  BriefcaseIcon,
  CheckSquareIcon,
  CloudIcon,
  CodeIcon,
  CoffeeIcon,
  DollarSignIcon,
  GamepadIcon,
  GraduationCapIcon,
  HammerIcon,
  ImageIcon,
  LayoutPanelTopIcon,
  LeafIcon,
  MapIcon,
  NewspaperIcon,
  SearchIcon,
  UsersIcon,
} from 'lucide-react';
import { useMemo } from 'react';
import { useTranslation } from 'react-i18next';

import { McpCategory } from '@/types/discover';

export const useCategory = () => {
  const { t } = useTranslation('discover');
  return useMemo(
    () => [
      {
        icon: LayoutPanelTopIcon,
        key: McpCategory.All,
        label: t('mcp.categories.all.name'),
        title: t('mcp.categories.all.description'),
      },
      {
        icon: CodeIcon,
        key: McpCategory.Developer,
        label: t('mcp.categories.developer.name'),
        title: t('mcp.categories.developer.description'),
      },
      {
        icon: CheckSquareIcon,
        key: McpCategory.Productivity,
        label: t('mcp.categories.productivity.name'),
        title: t('mcp.categories.productivity.description'),
      },
      {
        icon: HammerIcon,
        key: McpCategory.Tools,
        label: t('mcp.categories.tools.name'),
        title: t('mcp.categories.tools.description'),
      },
      {
        icon: SearchIcon,
        key: McpCategory.WebSearch,
        label: t('mcp.categories.web-search.name'),
        title: t('mcp.categories.web-search.description'),
      },
      {
        icon: ImageIcon,
        key: McpCategory.MediaGenerate,
        label: t('mcp.categories.media-generate.name'),
        title: t('mcp.categories.media-generate.description'),
      },
      {
        icon: BriefcaseIcon,
        key: McpCategory.Business,
        label: t('mcp.categories.business.name'),
        title: t('mcp.categories.business.description'),
      },
      {
        icon: GraduationCapIcon,
        key: McpCategory.ScienceEducation,
        label: t('mcp.categories.science-education.name'),
        title: t('mcp.categories.science-education.description'),
      },
      {
        icon: DollarSignIcon,
        key: McpCategory.StocksFinance,
        label: t('mcp.categories.stocks-finance.name'),
        title: t('mcp.categories.stocks-finance.description'),
      },
      {
        icon: NewspaperIcon,
        key: McpCategory.News,
        label: t('mcp.categories.news.name'),
        title: t('mcp.categories.news.description'),
      },
      {
        icon: UsersIcon,
        key: McpCategory.Social,
        label: t('mcp.categories.social.name'),
        title: t('mcp.categories.social.description'),
      },
      {
        icon: GamepadIcon,
        key: McpCategory.GamingEntertainment,
        label: t('mcp.categories.gaming-entertainment.name'),
        title: t('mcp.categories.gaming-entertainment.description'),
      },
      {
        icon: CoffeeIcon,
        key: McpCategory.Lifestyle,
        label: t('mcp.categories.lifestyle.name'),
        title: t('mcp.categories.lifestyle.description'),
      },
      {
        icon: LeafIcon,
        key: McpCategory.HealthWellness,
        label: t('mcp.categories.health-wellness.name'),
        title: t('mcp.categories.health-wellness.description'),
      },
      {
        icon: MapIcon,
        key: McpCategory.TravelTransport,
        label: t('mcp.categories.travel-transport.name'),
        title: t('mcp.categories.travel-transport.description'),
      },
      {
        icon: CloudIcon,
        key: McpCategory.Weather,
        label: t('mcp.categories.weather.name'),
        title: t('mcp.categories.weather.description'),
      },
    ],
    [t],
  );
};

export const useCategoryItem = (key?: McpCategory) => {
  const items = useCategory();
  if (!key) return;
  return items.find((item) => item.key === key);
};
