# CCS Interactive Prompt Utilities (PowerShell 5.1+ compatible)
# NO external dependencies

$ErrorActionPreference = "Stop"

# Interactive confirmation prompt
function Confirm-Action {
    param(
        [string]$Message,
        [ValidateSet('Yes', 'No')]
        [string]$Default = 'No'
    )

    # Check for --yes flag (automation)
    if ($env:CCS_YES -eq '1' -or $global:RemainingArgs -contains '--yes' -or $global:RemainingArgs -contains '-y') {
        return $Default -eq 'Yes'
    }

    # Check for --no-input flag (CI)
    if ($env:CCS_NO_INPUT -eq '1' -or $global:RemainingArgs -contains '--no-input') {
        Write-Host "[X] Interactive input required but --no-input specified" -ForegroundColor Red
        exit 1
    }

    # Non-TTY: use default
    if ([Console]::IsInputRedirected) {
        return $Default -eq 'Yes'
    }

    # Interactive prompt
    $PromptText = if ($Default -eq 'Yes') {
        "$Message [Y/n]: "
    } else {
        "$Message [y/N]: "
    }

    while ($true) {
        Write-Host $PromptText -NoNewline -ForegroundColor Cyan
        $Response = Read-Host

        $Normalized = $Response.Trim().ToLower()

        # Empty answer: use default
        if ($Normalized -eq '' -or $Normalized -eq ' ') {
            return $Default -eq 'Yes'
        }

        # Valid answers
        if ($Normalized -eq 'y' -or $Normalized -eq 'yes') {
            return $true
        }

        if ($Normalized -eq 'n' -or $Normalized -eq 'no') {
            return $false
        }

        # Invalid input: retry
        Write-Host "[!] Please answer y or n" -ForegroundColor Yellow
    }
}

# Interactive text input
function Read-Input {
    param(
        [string]$Message,
        [string]$Default = '',
        [scriptblock]$Validate = $null
    )

    # Non-TTY: use default or error
    if ([Console]::IsInputRedirected) {
        if ($Default) {
            return $Default
        }
        throw "Interactive input required but stdin is redirected"
    }

    # Interactive prompt
    $PromptText = if ($Default) {
        "${Message} [$Default]: "
    } else {
        "${Message}: "
    }

    while ($true) {
        Write-Host $PromptText -NoNewline -ForegroundColor Cyan
        $Response = Read-Host

        $Value = if ($Response.Trim()) { $Response.Trim() } else { $Default }

        # Validate input if validator provided
        if ($Validate) {
            $Error = & $Validate $Value
            if ($Error) {
                Write-Host "[!] $Error" -ForegroundColor Yellow
                continue
            }
        }

        return $Value
    }
}

# Check if running in non-interactive mode
function Test-NonInteractive {
    return [Console]::IsInputRedirected -or
           $env:CCS_YES -eq '1' -or
           $env:CCS_NO_INPUT -eq '1'
}
