private/Install-Configuration.ps1

[CmdletBinding(SupportsShouldProcess)]
param (
  [string]
  [Parameter(Mandatory)]
  [ValidateScript({ Test-Path $_ -PathType Leaf }, ErrorMessage = 'Path must be a valid file')]
  $ConfigFilename
)

$Config = Import-PowerShellDataFile $ConfigFilename
New-Item $Config.ConfigPath -ItemType Directory -Force | Out-Null
"Install configuration to $($Config.ConfigPath)" | Write-Verbose

$TemplatePath = Join-Path $PSScriptRoot '../templates'
$BasicFilePath = Join-Path $Config.ConfigPath basic.cfg
$ServerFilePath = Join-Path $Config.ConfigPath server.cfg
$MissionsPath = Join-Path $Config.MasterPath 'mpmissions'
$Config.DefaultMission ??= & $PSScriptRoot/Get-DefaultMission.ps1 -MissionsPath $MissionsPath
$Config.PasswordAdmin = (1..32 | ForEach-Object { '{0:x2}' -f (Get-Random -Maximum 256) }) -join ''

$TemplateContent = Get-Content $TemplatePath/server.cfg -Raw
$TemplateContent = $ExecutionContext.InvokeCommand.ExpandString($TemplateContent)
$TemplateContent | Set-Content $ServerFilePath
Copy-Item $TemplatePath/basic.cfg $BasicFilePath