import type { LucideIcon } from 'lucide-react'
import {
  ArrowDownCircle,
  ArrowRight,
  AudioLines,
  BadgeCheck,
  BarChart3,
  BookOpen,
  Bookmark,
  Box,
  Brain,
  ChartColumn,
  Check,
  ChevronDown,
  ChevronLeft,
  ChevronRight,
  ChevronUp,
  CircleUser,
  Clapperboard,
  ClipboardCheck,
  Clock3,
  CloudUpload,
  Coins,
  Copy,
  Cpu,
  Diamond,
  Download,
  ExternalLink,
  Eye,
  EyeOff,
  FileText,
  Film,
  Filter,
  Folder,
  FolderHeart,
  FolderOpen,
  Globe,
  GripVertical,
  Image,
  ImagePlus,
  Info,
  Lightbulb,
  Link2,
  Loader2,
  Lock,
  LogOut,
  Menu,
  Mic,
  Minus,
  Monitor,
  Pause,
  Pencil,
  Play,
  PlayCircle,
  Plus,
  Receipt,
  RefreshCw,
  Search,
  Settings,
  Sparkles,
  SquarePen,
  Trash2,
  TriangleAlert,
  Unplug,
  Undo2,
  Upload,
  UserRound,
  UserRoundCog,
  UsersRound,
  Video,
  VolumeX,
  WandSparkles,
  X,
  Zap,
} from 'lucide-react'
import { customIcons } from './custom'

export const iconRegistry = {
  ...customIcons,
  globe: Globe,
  folderHeart: FolderHeart,
  unplug: Unplug,
  userRoundCog: UserRoundCog,
  close: X,
  closeSm: X,
  closeMd: X,
  closeSolid: X,
  edit: Pencil,
  editSquare: SquarePen,
  trash: Trash2,
  trashAlt: Trash2,
  check: Check,
  checkSolid: Check,
  checkSm: Check,
  checkTiny: Check,
  checkXs: Check,
  checkDot: Check,
  checkMicro: Check,
  refresh: RefreshCw,
  plus: Plus,
  plusAlt: Plus,
  plusMd: Plus,
  chevronDown: ChevronDown,
  chevronRight: ChevronRight,
  chevronRightMd: ChevronRight,
  chevronLeft: ChevronLeft,
  chevronUp: ChevronUp,
  mic: Mic,
  micOutline: Mic,
  bolt: Zap,
  image: Image,
  imageAlt: Image,
  imagePreview: Image,
  imageEdit: ImagePlus,
  imageLandscape: Image,
  video: Video,
  videoAlt: Video,
  videoWide: Video,
  sparkles: Sparkles,
  sparklesAlt: WandSparkles,
  alert: TriangleAlert,
  alertSolid: TriangleAlert,
  alertOutline: TriangleAlert,
  pause: Pause,
  pauseSolid: Pause,
  play: Play,
  playCircle: PlayCircle,
  search: Search,
  searchAdd: Search,
  searchPlus: Search,
  info: Info,
  infoCircle: Info,
  folder: Folder,
  folderCards: Folder,
  upload: Upload,
  undo: Undo2,
  copy: Copy,
  user: UserRound,
  userAlt: UserRound,
  usersRound: UsersRound,
  userCircle: CircleUser,
  package: Box,
  cube: Box,
  idea: Lightbulb,
  ideaAlt: Lightbulb,
  globe2: Globe,
  file: FileText,
  fileText: FileText,
  fileFold: FileText,
  eye: Eye,
  eyeOff: EyeOff,
  bookOpen: BookOpen,
  menu: Menu,
  loader: Loader2,
  settingsHex: Settings,
  settingsHexAlt: Settings,
  settingsHexMinor: Settings,
  audioWave: AudioLines,
  externalLink: ExternalLink,
  receipt: Receipt,
  download: Download,
  logout: LogOut,
  filter: Filter,
  minus: Minus,
  monitor: Monitor,
  coins: Coins,
  arrowRight: ArrowRight,
  arrowRightWide: ArrowRight,
  diamond: Diamond,
  lock: Lock,
  link: Link2,
  badgeCheck: BadgeCheck,
  cloudUpload: CloudUpload,
  clipboardCheck: ClipboardCheck,
  clock: Clock3,
  chart: ChartColumn,
  statsBar: ChartColumn,
  volumeOff: VolumeX,
  wandOff: WandSparkles,
  bookmark: Bookmark,
  arrowDownCircle: ArrowDownCircle,
  barChart: BarChart3,
  brain: Brain,
  clapperboard: Clapperboard,
  cpu: Cpu,
  film: Film,
  folderOpen: FolderOpen,
  gripVertical: GripVertical,
} as const satisfies Record<string, LucideIcon>

export type AppIconName = keyof typeof iconRegistry
