param (
    $Action,
    [hashtable] $Arguments
)

. "$PSScriptRoot/../aliae/Manage.ps1";
. "$PSScriptRoot/../PowerShell/Profile.ps1";
. "$PSScriptRoot/../../Scripts/Software.ps1";
. "$PSScriptRoot/../../Types/InstallerAction.ps1";

Start-SoftwareInstaller @PSBoundParameters `
    -Configurator {
        Add-PowerShellProfileStatement `
            -System `
            -Category "oh-my-posh" `
            -Script (
                @(
                    "# Oh My Posh!",
                    (Get-ScriptInitializer "oh-my-posh init pwsh"),
                    (Get-ScriptInitializer "oh-my-posh completion powershell")
                ) -join [System.Environment]::NewLine)
    } `
    -UserConfigurator {
        param(
            [hashtable] $Arguments
        )

        $theme = Get-UserConfig "oh-my-posh.theme";

        if ($theme) {
            $varName = "POSH_THEME";

            if ($theme -isnot [string]) {
                $root = "$($IsWindows ? $env:AppData : "~/.config")/oh-my-posh";
                $path = Join-Path $root "$($theme.name).omp.json";
                $null = New-Item -Force -ItemType Directory $root;

                Set-Content $path (
                    & {
                        if ($IsWindows) {
                            wsl cat $theme.source
                        } else {
                            cat $theme.source
                        }
                    });

                $theme = [string] $path;
            }

            if ($IsWindows) {
                [System.Environment]::SetEnvironmentVariable($varName, $path, "User");
            } else {
                . "$PSScriptRoot/../aliae/Manage.ps1";
                Add-EnvironmentVariable -User $Arguments.Name $varName $path;
            }
        }
    };