import {
	House,
	Folder,
	GitBranch,
	Gear,
	User,
	SignOut,
	Plus,
	PencilSimple,
	Trash,
	FloppyDisk,
	X,
	ArrowsClockwise,
	Copy,
	MagnifyingGlass,
	List,
	Check,
	Warning,
	Info,
	Spinner,
	GitCommit,
	GitMerge,
	ClockCounterClockwise,
	ArrowDown,
	ArrowUp,
	File,
	FileText,
	Image,
	Binary,
	Code,
	ArrowSquareOut,
	Play,
	Stop,
	Terminal,
	ArrowLeft,
	Bell,
} from "@phosphor-icons/react";

export type IconName =
	| "dashboard"
	| "projects"
	| "repositories"
	| "settings"
	| "profile"
	| "logout"
	| "add"
	| "edit"
	| "delete"
	| "save"
	| "cancel"
	| "refresh"
	| "copy"
	| "search"
	| "menu"
	| "close"
	| "success"
	| "error"
	| "warning"
	| "info"
	| "loading"
	| "branch"
	| "commit"
	| "merge"
	| "history"
	| "pull"
	| "push"
	| "fetch"
	| "file"
	| "folder"
	| "code"
	| "document"
	| "image"
	| "binary"
	| "external"
	| "play"
	| "stop"
	| "terminal"
	| "arrow-left"
	| "bell";

export const iconRegistry: Record<
	IconName,
	React.ComponentType<{
		size?: number | string;
		weight?: "thin" | "light" | "regular" | "bold" | "fill" | "duotone";
	}>
> = {
	// Navigation
	dashboard: House,
	projects: Folder,
	repositories: GitBranch,
	settings: Gear,
	profile: User,
	logout: SignOut,

	// Actions
	add: Plus,
	edit: PencilSimple,
	delete: Trash,
	save: FloppyDisk,
	cancel: X,
	refresh: ArrowsClockwise,
	copy: Copy,
	search: MagnifyingGlass,
	menu: List,
	close: X,

	// Status
	success: Check,
	error: X,
	warning: Warning,
	info: Info,
	loading: Spinner,

	// Git
	branch: GitBranch,
	commit: GitCommit,
	merge: GitMerge,
	history: ClockCounterClockwise,
	pull: ArrowDown,
	push: ArrowUp,
	fetch: ArrowsClockwise,

	// Files
	file: File,
	folder: Folder,
	code: Code,
	document: FileText,
	image: Image,
	binary: Binary,

	// Instance actions
	external: ArrowSquareOut,
	play: Play,
	stop: Stop,
	terminal: Terminal,
	"arrow-left": ArrowLeft,
	bell: Bell,
};

export const iconCategories = {
	navigation: [
		"dashboard",
		"projects",
		"repositories",
		"settings",
		"profile",
		"logout",
	] as IconName[],
	actions: [
		"add",
		"edit",
		"delete",
		"save",
		"cancel",
		"refresh",
		"copy",
		"search",
		"menu",
		"close",
	] as IconName[],
	status: ["success", "error", "warning", "info", "loading"] as IconName[],
	git: [
		"branch",
		"commit",
		"merge",
		"history",
		"pull",
		"push",
		"fetch",
	] as IconName[],
	files: [
		"file",
		"folder",
		"code",
		"document",
		"image",
		"binary",
	] as IconName[],
};
