# Validation helper functions 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 validate-ip [
    ip: string
    context?: string
]: bool {
    let ip_parts = ($ip | split row ".")
    if ($ip_parts | length) != 4 {
        print $"🛑 Invalid IP address format: ($ip)"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        return false
    }
    
    let valid_parts = ($ip_parts | each {|part|
        let num = ($part | into int)
        $num >= 0 and $num <= 255
    })
    
    if not ($valid_parts | all {|valid| $valid}) {
        print $"🛑 Invalid IP address values: ($ip)"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        return false
    }
    
    true
}

export def validate-port [
    port: int
    context?: string
]: bool {
    if $port < 1 or $port > 65535 {
        print $"🛑 Invalid port number: ($port). Must be between 1 and 65535"
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        return false
    }
    true
}

export def validate-settings [
    settings: record
    required_fields: list
    context?: string
]: 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)"}
        if ($context | is-not-empty) {
            print $"Context: ($context)"
        }
        return false
    }
    true
} 