WsCreator.psm1

# Module ws-creator : machines WSL décrites par <WS_CREATOR_MACHINES>\<nom>\. Une commande = une
# fonction de Public\ ; Private\ contient les briques (WSL, seed cloud-init, scripts, SSH côté Windows).
# Le module se suffit : cloud-config\, files\ et modules\ sont livrés avec lui (PowerShell Gallery).

# Les préférences de l'appelant ne s'appliquent pas aux fonctions d'un module : on les pose ici.
$ErrorActionPreference = 'Stop'
$PSNativeCommandUseErrorActionPreference = $true
$env:WSL_UTF8 = '1'

$script:Root = $PSScriptRoot   # cloud-config\, files\, modules\
# ce qui est à l'utilisateur vit hors du module, aux emplacements Windows usuels :
# la config dans %APPDATA% (machines décrites), le reconstructible dans %LOCALAPPDATA% (images)
$script:MachinesDir = if ($env:WS_CREATOR_MACHINES) { $env:WS_CREATOR_MACHINES } else { Join-Path -Path $env:APPDATA -ChildPath 'ws-creator\machines' }
$script:ImagesDir = if ($env:WS_CREATOR_IMAGES) { $env:WS_CREATOR_IMAGES } else { Join-Path -Path $env:LOCALAPPDATA -ChildPath 'ws-creator\images' }
$script:SshDir = Join-Path -Path $HOME -ChildPath '.ssh'
$script:Apply = $false   # posé par chaque commande : sans -Apply, aperçu seulement

foreach ($dir in 'Private', 'Public') {
    foreach ($file in Get-ChildItem -Path (Join-Path -Path $PSScriptRoot -ChildPath $dir) -Filter *.ps1) {
        . $file.FullName
    }
}

Set-Alias -Name ws-creator -Value Invoke-WsCreator
Export-ModuleMember -Alias ws-creator -Function (Get-ChildItem -Path (Join-Path -Path $PSScriptRoot -ChildPath 'Public') -Filter *.ps1).BaseName