#!/bin/pwsh
. "$PSScriptRoot/Context.ps1";

function Get-BackupCandidates() {
    [System.Collections.Generic.List[System.Tuple[string, string, string[]]]]$candidates = @();

    $candidates.AddRange(
        [System.Tuple[string, string, string[]][]]@(
            [System.Tuple]::Create(
                "Home",
                "$HOME",
                @(
                    "-i@`"$PSScriptRoot/../Resources/FileLists/Home.include.txt`"",
                    "-x@`"$PSScriptRoot/../Resources/FileLists/Home.exclude.txt`"")),
            [System.Tuple]::Create(
                "Public",
                "$env:PUBLIC",
                @(
                    "-i@`"$PSScriptRoot/../Resources/FileLists/Public.include.txt`"",
                    "-x@`"$PSScriptRoot/../Resources/FileLists/Public.exclude.txt`""))));

    return $candidates;
}

function Backup-PersonalFiles([Context] $context) {
    Write-Host "Backing up Personal Files";

    foreach ($candidate in Get-BackupCandidates) {
        $context.Backup($candidate[1], $context.FileArchivePath($candidate[0]), $candidate[2]);
    }
}

function Restore-PersonalFiles([Context] $context) {
    Write-Host "Restoring Personal Files";

    foreach ($candidate in Get-BackupCandidates) {
        $archivePath = $context.FileArchivePath($candidate[0]);
        $context.Restore($archivePath, $candidate[1]);
    }
}