/// <summary>
        /// Deploy a single mod
        /// </summary>
        /// <param name="mod"></param>
        public void DeployMod(DeploymentMod mod)
        {
            Analytics.TrackEvent("Deployment - Clicked DeployMod", new Dictionary <string, string>
            {
                { "Name", Settings.Default.steamUserName },
                { "Mod", mod.Name }
            });

            if (!Directory.Exists(Deployment.InstallPath))
            {
                DisplayMessage("Arma Install Path is empty.\nMake sure you have entered a valid path before deploying mods.");
                return;
            }

            mod.Marked = !mod.Marked;
            var linkPath = Path.Combine(Deployment.InstallPath, $"@{Functions.SafeName(mod.Name)}");

            if (mod.Marked)
            {
                //LINK MOD
                LinkMod(mod, linkPath);
            }
            else
            {
                //UNLINK MOD
                var links = Directory.EnumerateDirectories(Deployment.InstallPath).Select(d => new DirectoryInfo(d)).Where(d => d.Attributes.HasFlag(FileAttributes.ReparsePoint));
                if (links.Any(l => l.Name == $"@{Functions.SafeName(mod.Name)}"))
                {
                    DeleteLink(linkPath);
                }
            }

            Settings.Default.Deployments = Deployment;
            Settings.Default.Save();
        }
        /// <summary>
        /// Open a steam mod's page
        /// </summary>
        /// <param name="mod"></param>
        public void OpenModPage(DeploymentMod mod)
        {
            if (mod == null)
            {
                return;
            }

            var url = "https://steamcommunity.com/workshop/filedetails/?id=" + mod.WorkshopId;

            try
            { Process.Start(url); }
            catch
            {
                try
                {
                    url = url.Replace("&", "^&");
                    Process.Start(new ProcessStartInfo("cmd", $"/c start {url}")
                    {
                        CreateNoWindow = true
                    });
                }
                catch
                { DisplayMessage($"Could not open \"{url}\""); }
            }
        }
        /// <summary>
        /// Create a specific Symlink
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="linkPath"></param>
        private void LinkMod(DeploymentMod mod, string linkPath)
        {
            try
            {
                if (Directory.Exists(linkPath))
                {
                    Directory.Delete(linkPath, true);
                }

                Directory.CreateSymbolicLink(linkPath ?? throw new ArgumentNullException(nameof(linkPath)), mod.Path);
            }
            catch (Exception ex)
            { DisplayMessage("An exception occurred: \n\n" + ex.Message); }
        }
        /// <summary>
        /// Open a mod's folder
        /// </summary>
        /// <param name="mod"></param>
        public void OpenModFolder(DeploymentMod mod)
        {
            if (mod == null || !Directory.Exists(mod.Path))
            {
                DisplayMessage($"Could not open folder \"{mod?.Path}\"");
                return;
            }

            ProcessStartInfo startInfo = new()
            {
                Arguments = mod.Path,
                FileName  = "explorer.exe"
            };

            Process.Start(startInfo);
        }