use ../lib_provisioning/utils *

export def clip_copy [
  msg: string
  show: bool
]: nothing -> nothing {
  if ( (version).installed_plugins | str contains "clipboard" ) {
    $msg | clipboard copy
    print $"(_ansi default_dimmed)copied into clipboard now (_ansi reset)"
  } else {
    if (not $show) { _print $msg }
  }
}

export def notify_msg [
    title: string
    body: string
    icon: string
    time_body: string
    timeout: duration
    task?: closure
]: nothing -> nothing {
  if ( (version).installed_plugins | str contains "desktop_notifications" ) {
    if $task != null {
      ( notify -s $title -t $time_body --timeout $timeout -i $icon)
    } else {
      ( notify -s $title -t $body --timeout $timeout -i $icon)
    }
  } else {
    if $task != null {
      _print (
        $"(_ansi blue)($title)(_ansi reset)\n(ansi blue_bold)($time_body)(_ansi reset)"
      )
    } else {
      _print (
        $"(_ansi blue)($title)(_ansi reset)\n(ansi blue_bold)($body)(_ansi reset)"
      )
    }
  }
}

export def show_qr  [
  url: string
]: nothing -> nothing {
  if ( (version).installed_plugins | str contains "qr_maker" ) {
    print $"(_ansi blue_reverse)( $url | to qr )(_ansi reset)"
  } else {
    let qr_path = ($env.PROVISIONING_RESOURCES | path join "qrs" | path join ($env.PROVISIONING |
      ($url | path basename)
    ))
    if ($qr_path | path exists) {
      _print (open -r $qr_path)
    } else {
      _print $"(_ansi blue_reverse)( $url)(_ansi reset)"
      _print $"(_ansi purple)($url)(_ansi reset)"
    }
  }
}

export def port_scan [
  ip: string
  port: int
  sec_timeout: int
]: nothing -> bool {
  let wait_duration = ($"($sec_timeout)sec"| into duration)
  if ( (version).installed_plugins | str contains "port_scan" ) {
    (port scan $ip $port -t $wait_duration).is_open
  } else {
    (^nc -zv -w $sec_timeout ($ip | str trim) $port  err> (if $nu.os-info.name == "windows" { "NUL" } else { "/dev/null" })| complete).exit_code == 0
  }
}
