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

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

function Restore-PersonalApps([Context] $context) {
    # Device specific
    if ((Get-Command Install-PersonalDrivers -ErrorAction SilentlyContinue)) {
        Write-Information "Driver installation function was found. Starting installation";
        Install-PersonalDrivers $context;
    }

    $context.RemoveDesktopIcon("*Microsoft Edge*")

    # Backed up applications
    Restore-Git $context;
    Restore-LogitechGHUB $context;
    Restore-TmNations $context;
    Restore-TmUnited $context;
    Restore-ManiaPlanet $context;
    Restore-Osu $context;
    Restore-OsuLazer $context;
    Restore-PuTTY $context;
    Restore-RetroArch $context;
    Restore-reWASD $context;
    Restore-VisualStudio $context;

    # Design
    choco install -y `
        nerd-fonts-CascadiaCode;

    # Social Media
    choco install -y `
        signal;

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

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

    # Browsing
    Install-Firefox $context;
    choco install -y MSEdgeRedirect;
    winget install --accept-source-agreements --accept-package-agreements -e --id Brave.Brave;
    winget install --accept-source-agreements --accept-package-agreements -e --id Brave.Brave.Beta;
    winget install --accept-source-agreements --accept-package-agreements -e --id Brave.Brave.Nightly;

    $context.RemoveDesktopIcon("*Brave*");
    $context.RemoveTaskbarItem("*Brave*");

    # 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 `
        7zip `
        chocolateygui `
        bitwarden `
        keepass `
        gimp `
        gpu-z `
        windirstat `
        winmerge `
        xmedia-recode `
        hwmonitor `
        qbittorrent `
        imgburn `
        inkscape `
        krita `
        obs-studio `
        openvpn;

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

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

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

    # Media
    choco install -y k-litecodecpackmega;
    winget install --accept-source-agreements --accept-package-agreements -e --id Ytmdesktop.Ytmdesktop;
    $context.RemoveDesktopIcon("YouTube Music*");

    # Coding
    choco install -y --params "/NoDesktopIcon" vscode vscode-insiders;
    choco install -y --params "/NoDesktopIcon /AssociateWithFiles" vscodium;
    winget install --scope machine --accept-source-agreements --accept-package-agreements -e --id VSCodium.VSCodium.Insiders --override '/VerySilent /MergeTasks="!runCode,quicklaunchicon,addcontextmenufiles,addcontextmenufolders,associatewithfiles,addtopath"';

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

    $context.RemoveDesktopIcon("IDA *");

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

    $context.RemoveDesktopIcon("Docker*");
    $context.RemoveDesktopIcon("GitHub*");

    choco install -y `
        nvs `
        python `
        visualstudio2019-workload-vctools;

    refreshenv;
    nvs add latest;
    nvs link latest;

    # Terminal
    @($PROFILE, (powershell -c '$PROFILE')) | ForEach-Object {
        Get-Item "$(Split-Path -Parent $_)/profile.d/*Oh My Posh*";
    } | ForEach-Object {
        $oldContent = Get-Content $_;

        $oldContent | ForEach-Object {
            $indicator = "oh-my-posh init";
            $_ -replace $indicator,"$indicator --config ~/Nextcloud/.omp/manuel.omp.json";
        } | Set-Content $_;
    }

    # Gaming
    choco install -y goggalaxy;

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

    choco install -y `
        epicgameslauncher `
        steam `
        origin;

    $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 *32-Bit*");
}