using namespace System.Security.AccessControl;
using namespace System.Security.Principal;

param(
    $Action,
    [hashtable] $Arguments
)

. "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
. "$PSScriptRoot/../../../Common/Types/InstallerAction.ps1";

Start-SoftwareInstaller @PSBoundParameters `
    -Installer {
        param(
            [scriptblock] $Installer
        )

        $env:NVS_HOME = "$env:ProgramData\nvs";
        git clone "https://github.com/jasongin/nvs.git" $env:NVS_HOME;
        & "$env:NVS_HOME\nvs.cmd" install;

        $acl = Get-Acl $env:NVS_HOME;

        $acl.AddAccessRule(
            [FileSystemAccessRule]::new(
                [SecurityIdentifier]::new([WellKnownSidType]::BuiltinUsersSid, $null),
                [FileSystemRights]::FullControl,
                [InheritanceFlags]::ObjectInherit -bor [InheritanceFlags]::ContainerInherit,
                [PropagationFlags]::InheritOnly,
                [AccessControlType]::Allow));

        Set-Acl $env:NVS_HOME $acl;
        refreshenv;
        & $Installer -Action ([InstallerAction]::Configure);
    } `
    -Configurator {
        nvs add latest;
        nvs link latest;
    };