pragma Singleton
import Quickshell

Singleton {
	id: root

	function getAppId(fileName) {
		return fileName.endsWith(".desktop") ? fileName.replace(".desktop", "") : null;
	}

	function getFileType(fileName, isDir) {
		if (isDir)
			return "directory";
		let ext = fileName.includes('.') ? fileName.split('.').pop().toLowerCase() : "";
		if (ext === "desktop")
			return "desktop";

		const map = {
			"image": ["png", "jpg", "jpeg", "svg", "gif", "bmp", "webp", "ico", "tiff", "tif", "heic", "heif", "raw", "psd", "ai", "xcf"],
			"video": ["mp4", "mkv", "webm", "avi", "mov", "flv", "wmv", "m4v", "mpg", "mpeg", "3gp", "vob", "ogv", "ts"],
			"audio": ["mp3", "wav", "flac", "aac", "ogg", "m4a", "wma", "opus", "alac", "mid", "midi", "amr"],
			"archive": ["zip", "tar", "gz", "rar", "7z", "xz", "bz2", "tgz", "iso", "img", "dmg", "deb", "rpm", "apk"],
			"document": ["pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "odt", "ods", "odp", "rtf", "epub", "mobi", "djvu"],
			"text": ["txt", "md", "rst", "tex", "log", "json", "xml", "yaml", "yml", "toml", "ini", "conf", "cfg", "env", "csv", "tsv"],
			"code": ["qml", "cpp", "c", "h", "hpp", "py", "js", "ts", "jsx", "tsx", "java", "rs", "go", "rb", "php", "cs", "swift", "kt", "sh", "bash", "zsh", "fish", "html", "htm", "css", "scss", "sass", "less", "vue", "svelte", "sql", "graphql", "lua", "pl", "dart", "r", "dockerfile", "make"],
			"executable": ["exe", "msi", "bat", "cmd", "appimage", "run", "bin", "out", "so", "dll"],
			"font": ["ttf", "otf", "woff", "woff2"]
		};

		for (const [type, extensions] of Object.entries(map)) {
			if (extensions.includes(ext))
				return type;
		}
		return "unknown";
	}

	function getIconName(fileName, isDir) {
		if (isDir)
			return "folder";
		let ext = fileName.includes('.') ? fileName.split('.').pop().toLowerCase() : "";

		const map = {
			// Images
			"png": "image-x-generic",
			"jpg": "image-x-generic",
			"jpeg": "image-x-generic",
			"svg": "image-svg+xml",
			"gif": "image-x-generic",
			"bmp": "image-x-generic",
			"webp": "image-x-generic",
			"ico": "image-x-generic",
			"tiff": "image-x-generic",
			"tif": "image-x-generic",
			"heic": "image-x-generic",
			"heif": "image-x-generic",
			"raw": "image-x-generic",
			"psd": "image-vnd.adobe.photoshop",
			"ai": "application-illustrator",
			"xcf": "image-x-xcf",

			// Vidéos
			"mp4": "video-x-generic",
			"mkv": "video-x-generic",
			"webm": "video-x-generic",
			"avi": "video-x-generic",
			"mov": "video-x-generic",
			"flv": "video-x-generic",
			"wmv": "video-x-generic",
			"m4v": "video-x-generic",
			"mpg": "video-x-generic",
			"mpeg": "video-x-generic",
			"3gp": "video-x-generic",
			"vob": "video-x-generic",
			"ogv": "video-x-generic",
			"ts": "video-x-generic",

			// Audio
			"mp3": "audio-x-generic",
			"wav": "audio-x-generic",
			"flac": "audio-x-generic",
			"aac": "audio-x-generic",
			"ogg": "audio-x-generic",
			"m4a": "audio-x-generic",
			"wma": "audio-x-generic",
			"opus": "audio-x-generic",
			"alac": "audio-x-generic",
			"mid": "audio-midi",
			"midi": "audio-midi",
			"amr": "audio-x-generic",

			// Archives & Images
			"zip": "application-zip",
			"tar": "application-x-tar",
			"gz": "application-gzip",
			"rar": "application-vnd.rar",
			"7z": "application-x-7z-compressed",
			"xz": "application-x-xz",
			"bz2": "application-x-bzip2",
			"tgz": "application-x-compressed-tar",
			"iso": "application-x-cd-image",
			"img": "application-x-cd-image",
			"dmg": "application-x-apple-diskimage",
			"deb": "application-vnd.debian.binary-package",
			"rpm": "application-x-rpm",
			"apk": "application-vnd.android.package-archive",

			// Documents
			"pdf": "application-pdf",
			"doc": "application-msword",
			"docx": "application-vnd.openxmlformats-officedocument.wordprocessingml.document",
			"xls": "application-vnd.ms-excel",
			"xlsx": "application-vnd.openxmlformats-officedocument.spreadsheetml.sheet",
			"ppt": "application-vnd.ms-powerpoint",
			"pptx": "application-vnd.openxmlformats-officedocument.presentationml.presentation",
			"odt": "application-vnd.oasis.opendocument.text",
			"ods": "application-vnd.oasis.opendocument.spreadsheet",
			"odp": "application-vnd.oasis.opendocument.presentation",
			"rtf": "application-rtf",
			"epub": "application-epub+zip",
			"mobi": "application-x-mobipocket-ebook",
			"djvu": "image-vnd.djvu",
			"csv": "text-csv",
			"tsv": "text-tab-separated-values",

			// Data & Config
			"txt": "text-x-generic",
			"md": "text-markdown",
			"rst": "text-x-rst",
			"tex": "text-x-tex",
			"log": "text-x-log",
			"json": "application-json",
			"xml": "text-xml",
			"yaml": "text-x-yaml",
			"yml": "text-x-yaml",
			"toml": "text-x-toml",
			"ini": "text-x-generic",
			"conf": "text-x-generic",
			"cfg": "text-x-generic",
			"env": "text-x-generic",

			// Code
			"qml": "text-x-qml",
			"cpp": "text-x-c++src",
			"c": "text-x-csrc",
			"h": "text-x-chdr",
			"hpp": "text-x-c++hdr",
			"py": "text-x-python",
			"js": "text-x-javascript",
			"ts": "text-x-typescript",
			"jsx": "text-x-javascript",
			"tsx": "text-x-typescript",
			"java": "text-x-java",
			"rs": "text-x-rust",
			"go": "text-x-go",
			"rb": "text-x-ruby",
			"php": "application-x-php",
			"cs": "text-x-csharp",
			"swift": "text-x-swift",
			"kt": "text-x-kotlin",
			"sh": "application-x-shellscript",
			"bash": "application-x-shellscript",
			"zsh": "application-x-shellscript",
			"fish": "application-x-shellscript",
			"html": "text-html",
			"htm": "text-html",
			"css": "text-css",
			"scss": "text-x-scss",
			"sass": "text-x-sass",
			"less": "text-x-less",
			"vue": "text-html",
			"svelte": "text-html",
			"sql": "application-x-sql",
			"graphql": "text-x-generic",
			"lua": "text-x-lua",
			"pl": "text-x-perl",
			"dart": "text-x-dart",
			"r": "text-x-r",
			"dockerfile": "text-x-generic",
			"make": "text-x-makefile",

			// Executables
			"exe": "application-x-executable",
			"msi": "application-x-msi",
			"bat": "application-x-ms-dos-executable",
			"cmd": "application-x-ms-dos-executable",
			"appimage": "application-x-executable",
			"run": "application-x-executable",
			"bin": "application-x-executable",
			"out": "application-x-executable",
			"so": "application-x-sharedlib",
			"dll": "application-x-sharedlib",

			// Fonts
			"ttf": "font-x-generic",
			"otf": "font-x-generic",
			"woff": "font-x-generic",
			"woff2": "font-x-generic"
		};
		return map[ext] || "text-x-generic";
	}
}
