#!/bin/pwsh
. "$PSScriptRoot/Generic.ps1";
. "$PSScriptRoot/../Software/Firefox/Install.ps1";
. "$PSScriptRoot/../Software/git/Install.ps1";
. "$PSScriptRoot/../Software/LGHub/Install.ps1";
. "$PSScriptRoot/../Software/ManiaPlanet/Install.ps1";
. "$PSScriptRoot/../Software/osu!/Install.ps1";
. "$PSScriptRoot/../Software/osu!lazer/Install.ps1";
. "$PSScriptRoot/../Software/PuTTY/Install.ps1";
. "$PSScriptRoot/../Software/RetroArch/Install.ps1";
. "$PSScriptRoot/../Software/reWASD/Install.ps1";
. "$PSScriptRoot/../Software/TrackMania Nations Forever/Install.ps1";
. "$PSScriptRoot/../Software/TrackMania United Forever/Install.ps1";
. "$PSScriptRoot/../Software/VisualStudio/Install.ps1";
. "$PSScriptRoot/../../Common/Scripts/Context.ps1";
. "$PSScriptRoot/../../Common/Scripts/SoftwareManagement.ps1";

function Backup-PersonalApps([Context] $context) {
    Backup-GenericApps $context;
    Backup-LogitechGHUB $context;
    Backup-ManiaPlanet $context;
    Backup-Osu $context;
    Backup-OsuLazer $context;
    Backup-RetroArch $context;
    Backup-reWASD $context;
    Backup-TmNations $context;
    Backup-TmUnited $context;
    Backup-VisualStudio $context;
}

function Restore-PersonalApps([Context] $context) {
    # Backed up applications
    Restore-GenericApps $context;
    Restore-LogitechGHUB $context;
    Restore-TmNations $context;
    Restore-TmUnited $context;
    Restore-ManiaPlanet $context;
    Restore-Osu $context;
    Restore-OsuLazer $context;
    Restore-RetroArch $context;
    Restore-reWASD $context;
    Restore-VisualStudio $context;

    # Social Media
    choco install -y `
        signal `
        ;

    choco install -y `
        threema-desktop `
        element-desktop `
        teamspeak `
        ;

    winget install --accept-source-agreements --accept-package-agreements -e --id Discord.Discord;

    $context.RemoveDesktopIcon("*Discord*");
    $context.RemoveDesktopIcon("*Element*");
    $context.RemoveDesktopIcon("*TeamSpeak*");

    # Tools
    Install-SoftwarePackage $context "https://github.com/mRemoteNG/mRemoteNG/releases/download/2023.03.03-v1.77.3-nb/mRemoteNG-Installer-1.77.3.nb-1784.msi" @("/Quiet");

    choco install -y `
        gimp `
        gpu-z `
        windirstat `
        winmerge `
        xmedia-recode `
        hwmonitor `
        qbittorrent `
        imgburn `
        inkscape `
        krita `
        MetaX `
        obs-studio `
        openvpn `
        ;

    winget install --accept-source-agreements --accept-package-agreements -e --id AntSoftware.AntRenamer;

    $context.RemoveDesktopIcon("GPU-Z*");
    $context.RemoveDesktopIcon("WinDirStat*");
    $context.RemoveDesktopIcon("*HWMonitor*");
    $context.RemoveDesktopIcon("ImgBurn*");
    $context.RemoveDesktopIcon("Inkscape*");
    $context.RemoveDesktopIcon("Krita*");
    $context.RemoveDesktopIcon("mRemoteNG*");
    $context.RemoveDesktopIcon("MetaX*");
    $context.RemoveDesktopIcon("OBS Studio*");

    winget install --accept-source-agreements --accept-package-agreements -e --id AppWork.JDownloader;
    $context.RemoveDesktopIcon("JDownloader*");

    . "$PSScriptRoot/../Software/Ubiquiti UniFi Controller/Install.ps1" $context;

    # Coding
    choco install -y --ignore-checksums `
        ida-free `
        ;

    $context.RemoveDesktopIcon("IDA *");

    choco install -y `
        HxD `
        docker-desktop `
        imhex `
        dotpeek `
        ;

    $context.RemoveDesktopIcon("Docker*");

    # Gaming
    choco install -y goggalaxy;

    choco install --ignore-checksums -y `
        ubisoft-connect `
        ;

    choco install -y `
        epicgameslauncher `
        steam `
        ;

    winget install --accept-source-agreements --accept-package-agreements -e --id ElectronicArts.EADesktop;

    $context.RemoveDesktopIcon("*Ubisoft Connect*");
    $context.RemoveDesktopIcon("*Epic Games*");
    $context.RemoveDesktopIcon("*Steam*");
    $context.RemoveDesktopIcon("EA.*");

    choco install -y rayman-controlpanel;

    # Emulation
    choco install -y `
        ppsspp `
        ;

    $context.RemoveDesktopIcon("PPSSPP *-Bit*");
}