import {
  ArrowRight,
  ArrowLeft,
  House,
  KeyRound,
  Wallet,
  Newspaper,
  UserRound,
  Loader2,
  Check,
  ChevronDown,
  ChevronUp,
  Settings,
  Sun,
  SunMoon,
  Moon,
  WandSparkles,
  CircleX,
  Undo2,
  ArrowUp,
  Globe2,
  GraduationCap,
  Atom,
  Brain,
  Loader,
  Plus,
  ChevronRight,
  Share2,
  Download,
  Bell,
  ThumbsUp,
  Lock,
  Building,
  ChevronLeft,
  X,
  UserRoundPlus,
  ListFilter,
  Copy,
  Languages,
  IdCard,
  AtSign,
  Key,
  ChevronsUpDown,
  RefreshCw,
  Workflow,
  LogOut,
  MailPlus,
  Trash,
  Trash2,
  ShieldCheck,
  Pencil,
  TrendingUp,
  UsersRound,
  MonitorSmartphone,
} from "lucide-react-native";
import { withUniwind } from "uniwind";

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

import type { LucideIcon } from "lucide-react-native";

const icons = {
  ...GlobalIcons,
  ArrowRight,
  ArrowLeft,
  House,
  KeyRound,
  Wallet,
  Newspaper,
  UserRound,
  Loader2,
  Check,
  Key,
  ChevronDown,
  ChevronUp,
  Building,
  Settings,
  Sun,
  SunMoon,
  Moon,
  CircleX,
  WandSparkles,
  ChevronsUpDown,
  Undo2,
  ArrowUp,
  Globe2,
  GraduationCap,
  Atom,
  Brain,
  Loader,
  Plus,
  MailPlus,
  ChevronRight,
  Share2,
  Download,
  Bell,
  ThumbsUp,
  Lock,
  ChevronLeft,
  ListFilter,
  X,
  Languages,
  IdCard,
  AtSign,
  Workflow,
  LogOut,
  Trash,
  Trash2,
  Pencil,
  RefreshCw,
  ShieldCheck,
  Copy,
  TrendingUp,
  UsersRound,
  UserRoundPlus,
  MonitorSmartphone,
};

const Icons = {} as {
  [K in keyof typeof icons]: (typeof icons)[K];
};

(Object.keys(icons) as (keyof typeof icons)[]).forEach((key) => {
  Icons[key] = withUniwind(
    icons[key] as React.FC<React.SVGProps<SVGElement>>,
  ) as LucideIcon & React.FC<React.SVGProps<SVGElement>>;
});

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

export { Icons };
