import {
  Activity,
  AlertCircle,
  AlertTriangle,
  ArrowRight,
  AtSign,
  LogIn,
  UserRound,
  SunMoon,
  Moon,
  Sun,
  Undo2,
  Check,
  Loader,
  Loader2,
  CircleX,
  CheckCircle2,
  Gift,
  X,
  CheckIcon,
  ArrowUp,
  Globe2,
  GraduationCap,
  Atom,
  Brain,
  LogOut,
  Settings,
  Home,
  Star,
  CreditCard,
  EllipsisVertical,
  User2,
  LifeBuoy,
  MessageCircle,
  MessageSquare,
  MessageSquarePlus,
  Plus,
  Trash,
  Ellipsis,
  ClockFading,
  BadgeCheck,
  BadgeX,
  ArrowUpRight,
  Menu,
  MonitorSmartphone,
  Key,
  TrendingUp,
  TrendingDown,
  PaintBucket,
  ChartNoAxesGantt,
  BookOpen,
  Webhook,
  Download,
  ChevronRight,
  SendHorizontal,
  Copy,
  ChevronsUpDown,
  ArrowDown,
  ArrowLeft,
  UserRoundPlus,
  UsersRound,
  Search,
  Filter,
  ChevronsLeft,
  ChevronLeft,
  ChevronsRight,
  Settings2,
  ChevronDown,
  EyeOff,
  ChevronUp,
  XCircle,
  MailPlus,
  PlusCircle,
  Calendar,
  ShieldUser,
  Building,
  HandCoins,
  Code,
  VenetianMask,
  Ban,
  Eye,
  Lock,
  Slash,
  MoreHorizontal,
  MoreVertical,
  Circle,
  Minus,
  PanelLeft,
  Database,
  Snowflake,
  Cloud,
  Crown,
  Target,
  Megaphone,
  Package,
  Headphones,
  Info,
  Bell,
  Share2,
  LayoutDashboard,
  Pencil,
  BarChart3,
  // AI module icons
  ImagePlus,
  Image,
  Globe,
  Sparkle,
  Sparkles,
  Square,
  SquarePen,
  TextSearch,
  MessagesSquare,
  ExternalLink,
  FileText,
  ChartNoAxesColumn,
  Zap,
  PackageOpen,
  Paperclip,
  AudioLines,
  AudioWaveform,
  Undo,
  Pause,
  Play,
  Redo,
  BanknoteX,
  ClockAlert,
  RotateCcw,
  RotateCw,
  ThumbsUp,
  ThumbsDown,
  // Additional AI module icons
  Shrub,
  Lightbulb,
  Puzzle,
  Smile,
  RefreshCcw,
  LibraryBig,
  BadgeDollarSign,
  Newspaper,
  RectangleHorizontal,
  RectangleVertical,
  ImagePlay,
  ImageOff,
  Send,
  FileUp,
  FileX,
  DownloadCloud,
  Link,
  ScrollText,
  Mic,
  MicOff,
} from "lucide-react";

import { Icons as GlobalIcons } from "@turbostarter/ui/assets";

import type { FC, SVGProps } from "react";


// AI Provider Icons
const createProviderIcon = (paths: string[], viewBox = "0 0 24 24"): FC<SVGProps<SVGSVGElement>> => {
  const Component: FC<SVGProps<SVGSVGElement>> = (props) => (
    <svg
      xmlns="http://www.w3.org/2000/svg"
      viewBox={viewBox}
      fill="currentColor"
      {...props}
    >
      {paths.map((d, i) => (
        <path key={i} d={d} />
      ))}
    </svg>
  );
  return Component;
};

const OpenAI = createProviderIcon([
  "M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.677l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.896zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z",
]);

const Gemini = createProviderIcon([
  "M12 0C5.372 0 0 5.373 0 12s5.372 12 12 12 12-5.373 12-12S18.628 0 12 0zm5.568 14.163c-.169.288-.456.457-.781.457H7.213c-.325 0-.612-.169-.781-.457L4.194 12l2.238-2.163c.169-.288.456-.456.781-.456h9.574c.325 0 .612.168.781.456L19.806 12l-2.238 2.163z",
]);

const Claude = createProviderIcon([
  "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 15.5v-4.38l-3.5 2.19-.75-1.23L10.5 12l-3.75-2.08.75-1.23L11 10.88V6.5h1.5v4.38l3.5-2.19.75 1.23L13 12l3.75 2.08-.75 1.23-3.5-2.19V17.5H11z",
]);

const Grok = createProviderIcon([
  "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z",
]);

const DeepSeek = createProviderIcon([
  "M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8zm4-9h-3V8a1 1 0 0 0-2 0v3H8a1 1 0 0 0 0 2h3v3a1 1 0 0 0 2 0v-3h3a1 1 0 0 0 0-2z",
]);

const Replicate = createProviderIcon([
  "M4.5 2.5a2 2 0 0 0-2 2v15a2 2 0 0 0 2 2h15a2 2 0 0 0 2-2v-15a2 2 0 0 0-2-2h-15zm2 5h11v2h-11v-2zm0 4h11v2h-11v-2zm0 4h7v2h-7v-2z",
]);

const Luma = createProviderIcon([
  "M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5",
]);

const StabilityAI = createProviderIcon([
  "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-5-9h10v2H7z",
]);

const Recraft = createProviderIcon([
  "M20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83zM3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM5.92 19H5v-.92l9.06-9.06.92.92L5.92 19z",
]);

const ElevenLabs = createProviderIcon([
  "M9 2v20M15 2v20",
]);

const Nvidia = createProviderIcon([
  "M11.06 8.84c-.6-.3-1.33-.4-2.06-.4-1.91 0-3.47.8-4.3 2.23l-.72-.42c.95-1.66 2.83-2.64 5.02-2.64.87 0 1.72.13 2.46.5l-.4.73zm7.56-3.12c-1.5-1.17-3.57-1.72-5.76-1.72-2.95 0-5.5 1.01-7.05 2.72-.98 1.08-1.59 2.4-1.81 3.87l.82.15c.2-1.32.73-2.5 1.59-3.45 1.4-1.55 3.7-2.45 6.45-2.45 2.02 0 3.9.51 5.24 1.54l.52-.66zM12 22c5.52 0 10-4.48 10-10S17.52 2 12 2 2 6.48 2 12s4.48 10 10 10z",
]);

export const Icons = {
  ...GlobalIcons,
  Minus,
  PanelLeft,
  Eye,
  Slash,
  Code,
  VenetianMask,
  Lock,
  MailPlus,
  ClockFading,
  Calendar,
  ArrowRight,
  LogIn,
  UserRound,
  Key,
  SunMoon,
  ChevronRight,
  Moon,
  Sun,
  Undo2,
  Check,
  Loader2,
  CircleX,
  Ban,
  CheckCircle2,
  CheckIcon,
  Gift,
  X,
  ArrowUp,
  Globe2,
  GraduationCap,
  ChartNoAxesGantt,
  BookOpen,
  Webhook,
  Star,
  Atom,
  Brain,
  LogOut,
  Settings,
  Home,
  CreditCard,
  User2,
  EllipsisVertical,
  LifeBuoy,
  MessageCircle,
  Plus,
  Loader,
  Ellipsis,
  Trash,
  BadgeCheck,
  BadgeX,
  ArrowUpRight,
  Menu,
  MonitorSmartphone,
  Download,
  Copy,
  PaintBucket,
  SendHorizontal,
  ChevronsUpDown,
  ArrowDown,
  ArrowLeft,
  UsersRound,
  UserRoundPlus,
  Search,
  Filter,
  ChevronsLeft,
  ChevronLeft,
  ChevronsRight,
  Settings2,
  ChevronDown,
  EyeOff,
  ChevronUp,
  XCircle,
  PlusCircle,
  ShieldUser,
  Building,
  HandCoins,
  TrendingUp,
  MoreHorizontal,
  MoreVertical,
  Circle,
  BarChart3,
  BarChart: BarChart3,
  Pencil,
  Clock: ClockFading,
  Database,
  Snowflake,
  Cloud,
  Crown,
  Target,
  Megaphone,
  Package,
  Headphones,
  TrendingDown,
  AlertTriangle,
  AlertCircle,
  Info,
  Bell,
  Share: Share2,
  Activity,
  AtSign,
  MessageSquare,
  MessageSquarePlus,
  LayoutDashboard,
  Edit: Pencil,
  // AI module icons
  ImagePlus,
  Globe,
  Sparkle,
  Sparkles,
  Square,
  SquarePen,
  TextSearch,
  MessagesSquare,
  ExternalLink,
  FileText,
  ChartNoAxesColumn,
  Zap,
  PackageOpen,
  Paperclip,
  AudioLines,
  AudioWaveform,
  Undo,
  Pause,
  Play,
  Redo,
  BanknoteX,
  ClockAlert,
  RotateCcw,
  RotateCw,
  Image,
  ThumbsUp,
  ThumbsDown,
  // Additional AI module icons
  Shrub,
  Lightbulb,
  Puzzle,
  Smile,
  RefreshCcw,
  LibraryBig,
  BadgeDollarSign,
  Newspaper,
  RectangleHorizontal,
  RectangleVertical,
  ImagePlay,
  ImageOff,
  Send,
  FileUp,
  FileUpIcon: FileUp,
  FileX,
  DownloadCloud,
  Link,
  ScrollText,
  Mic,
  MicOff,
  MinusIcon: Minus,
  PlusIcon: Plus,
  // AI provider icons
  OpenAI,
  Gemini,
  Claude,
  Grok,
  DeepSeek,
  Replicate,
  Luma,
  StabilityAI,
  Recraft,
  ElevenLabs,
  Nvidia,
};

export type Icon = (typeof Icons)[keyof typeof Icons];
