functions/Actions/WaitForInput/Restore-AzureFailureWaitForInput.ps1

function Restore-AzureFailureWaitForInput {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string] $Step,

        [Parameter(Mandatory = $true)]
        [string] $Branch,

        [Parameter(Mandatory = $false)]
        [bool] $RequireResumeOnRestore = $false,

        [string] $ActionName = "urn:csci:microsoft:chaosStudio:waitForInput/1.0"
    )

    $targetTrace = Get-AzureFailureTrace | Where-Object {
        $_.ResourceId -eq "WaitForInput" -and
        $_.Step -eq $Step -and
        $_.Branch -eq $Branch -and
        $_.Action -eq $ActionName
    }

    if ($targetTrace.ActionStatus -eq "Skipped") {
        Write-PSFMessage -Level Verbose -Message "Step ($Step), Branch ($Branch): Action was previously skipped. Skipping restore."
        return
    }

    # Check if we need to wait for input during restore


    if (-not  $RequireResumeOnRestore) {
        Write-PSFMessage -Level Verbose -Message "Step ($Step), Branch ($Branch): Restore does not require user input. Continuing..."

        $paramUpdateAzureFailureTrace = @{
            ResourceId                = "WaitForInput"
            Step                      = $Step
            Branch                    = $Branch
            Action                    = $ActionName
            ActionStatus              = "Restored"
            ActionRestoreTriggerTime  = Get-Date
            ActionRestoreCompleteTime = Get-Date
        }
        Update-AzureFailureTrace @paramUpdateAzureFailureTrace

    }
    else {

        Write-PSFMessage -Level Host -Message "Step ($Step), Branch ($Branch): Waiting for user input to continue restore..."
        Write-PSFMessage -Level Host -Message "Type 'resume' and press Enter to continue the restore process."

        $actionRestoreTriggerTime = Get-Date

        # Update trace to Restoring status
        $paramUpdateAzureFailureTrace = @{
            ResourceId               = "WaitForInput"
            Step                     = $Step
            Branch                   = $Branch
            Action                   = $ActionName
            ActionStatus             = "Restoring"
            ActionMessage            = "Waiting for user input"
            ActionRestoreTriggerTime = $actionRestoreTriggerTime
        }
        Update-AzureFailureTrace @paramUpdateAzureFailureTrace

        try {
            $userInput = ""
            while ($userInput -ne "resume") {
                $userInput = Read-Host "Enter 'resume' to continue"
                if ($userInput -ne "resume") {
                    Write-PSFMessage -Level Warning -Message "Invalid input. Please type 'resume' to continue."
                }
            }
            Write-PSFMessage -Level Host -Message "Resuming restore process..."

            $paramUpdateAzureFailureTrace = @{
                ResourceId                = "WaitForInput"
                Step                      = $Step
                Branch                    = $Branch
                Action                    = $ActionName
                ActionStatus              = "Restored"
                ActionRestoreCompleteTime = Get-Date
            }
            Update-AzureFailureTrace @paramUpdateAzureFailureTrace
        }
        catch {
            Write-PSFMessage -Level Warning -Message "Step ($Step), Branch ($Branch): Failed during restore wait. Error: $($_.Exception.Message)."
            $paramUpdateAzureFailureTrace = @{
                ResourceId                = "WaitForInput"
                Step                      = $Step
                Branch                    = $Branch
                Action                    = $ActionName
                ActionStatus              = "RestoreError"
                ActionMessage             = 'Failed during restore wait - {0}' -f ($_.Exception.Message -replace "`r`n", "\n")
                ActionRestoreCompleteTime = Get-Date
            }
            Update-AzureFailureTrace @paramUpdateAzureFailureTrace
        }
    }

}