# Enhanced validation utilities for provisioning tool

export def validate-required [
    value: any
    name: string
    context?: string
]: bool {
    if ($value | is-empty) {
        print $"🛑 Required parameter '($name)' is missing or empty"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        print $"💡 Please provide a value for '($name)'"
        return false
    }
    true
}

export def validate-path [
    path: string
    context?: string
    --must-exist
]: bool {
    if ($path | is-empty) {
        print "🛑 Path parameter is empty"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        return false
    }
    
    if $must_exist and not ($path | path exists) {
        print $"🛑 Path '($path)' does not exist"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        print "💡 Check if the path exists and you have proper permissions"
        return false
    }
    
    true
}

export def validate-command [
    command: string
    context?: string
]: bool {
    let cmd_exists = (^bash -c $"type -P ($command)" | complete)
    if $cmd_exists.exit_code != 0 {
        print $"🛑 Command '($command)' not found in PATH"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        print $"💡 Install '($command)' or add it to your PATH"
        return false
    }
    true
}

export def safe-execute [
    command: closure
    context: string
    --fallback: closure
]: any {
    try {
        do $command
    } catch {|err|
        print $"⚠️  Warning: Error in ($context): ($err.msg)"
        if $fallback != null {
            print "🔄 Executing fallback..."
            do $fallback
        } else {
            print $"🛑 Execution failed in ($context)"
            print $"Error: ($err.msg)"
        }
    }
}

export def validate-settings [
    settings: record
    required_fields: list
]: bool {
    let missing_fields = ($required_fields | where {|field| 
        ($settings | get -o $field | is-empty)
    })
    
    if ($missing_fields | length) > 0 {
        print "🛑 Missing required settings fields:"
        $missing_fields | each {|field| print $"  - ($field)"}
        return false
    }
    true
} 