modules/Definitions/Snowflake.Entro.psm1

Set-StrictMode -Version Latest

function Register-SnowflakeEntroDefinitions {
    Import-Module (Join-Path (Split-Path $PSScriptRoot -Parent) 'IW.EntroCatalog.psm1') -Force -WarningAction SilentlyContinue

    Register-IntegrationWizardDefinition @{
        Id           = 'snowflake-entro'
        Platform     = 'Snowflake'
        Product      = 'Entro'
        CoreSwitch   = 'Entro'
        CliName      = 'snow'
        Title        = 'Entro Snowflake integration'
        FolderName   = 'Entro-Snowflake'
        AccessLevels = @()
        AdminRoles   = @('Snowflake ACCOUNTADMIN or SECURITYADMIN')
        OutputsHelp  = 'Paste Environment, Display Name, and Account URL into Entro after key-pair user setup.'
        Inputs       = @(
            @{ Name = 'Environment'; Source = 'Supply'; Prompt = 'Environment label'; Purpose = 'Label in Entro'; Required = $true }
            @{ Name = 'DisplayName'; Source = 'Supply'; Prompt = 'Display name in Entro'; Purpose = 'Operator-chosen label'; Required = $true }
            @{ Name = 'AccountUrl'; Source = 'Supply'; Prompt = 'Snowflake account URL'; Purpose = 'https://account.snowflakecomputing.com'; Required = $true }
            @{ Name = 'EntroUser'; Source = 'Supply'; Prompt = 'Snowflake username for Entro'; Purpose = 'User created for Entro (default ENTRO)'; Required = $false; Default = 'ENTRO' }
            @{ Name = 'OutputDirectory'; Source = 'Supply'; Prompt = 'Output directory'; Purpose = 'Wizard output directory'; Required = $false }
        )
        CheckInputs  = @(
            @{ Name = 'AccountUrl'; Source = 'Supply'; Prompt = 'Snowflake account URL'; Purpose = 'Account to verify'; Required = $true }
            @{ Name = 'EntroUser'; Source = 'Supply'; Prompt = 'Snowflake username for Entro'; Purpose = 'User to verify'; Required = $false; Default = 'ENTRO' }
            @{ Name = 'OutputDirectory'; Source = 'Supply'; Prompt = 'Output directory'; Purpose = 'Wizard output directory'; Required = $false }
        )
        Steps        = {
            param($ctx)
            @(
                @{
                    Id    = 'entro-snowflake-user'
                    Title = 'Create Entro Snowflake user with key-pair auth'
                    Kind  = 'Ensure'
                    Probe = { param($c) 'Create' }
                    Run   = {
                        param($c)
                        $user = if ($c['EntroUser']) { $c['EntroUser'] } else { 'ENTRO' }
                        Write-Step 'Entro Snowflake user'
                        Write-Info "Create Snowflake user $user with RSA key-pair and Entro-documented role grants."
                        Write-Info "Account: $($c['AccountUrl'])"
                    }
                    BuildScript = {
                        param($c)
                        $user = if ($c['EntroUser']) { $c['EntroUser'] } else { 'ENTRO' }
                        @"
# Entro Snowflake: CREATE USER $user WITH RSA_PUBLIC_KEY=...; GRANT ROLE ...
"@

                    }
                }
            )
        }
        OnRunComplete = {
            param($ctx)
            Write-Host ''
            Write-Host 'Entro handoff' -ForegroundColor Cyan
            Write-Host " Environment: $($ctx['Environment'])"
            Write-Host " Display Name: $($ctx['DisplayName'])"
            Write-Host " Account URL: $($ctx['AccountUrl'])"
            Write-Host " User: $(if ($ctx['EntroUser']) { $ctx['EntroUser'] } else { 'ENTRO' })"
            Write-Host ''
        }
    }
}

Export-ModuleMember -Function Register-SnowflakeEntroDefinitions