local process = require("@lune/process")
local stdio = require("@lune/stdio")
local task = require("@lune/task")

-- NOTE: This test is intentionally not included in the
-- automated tests suite since it requires user input

local passed = false
task.delay(0.2, function()
	if passed then
		task.spawn(error, "Prompt must not block other lua threads")
		process.exit(1)
	else
		-- stdio.ewrite("Hello from concurrent task!")
	end
end)

-- Text prompt

local text = stdio.prompt("text", "Type some text")
assert(#text > 0, "Did not get any text")
print(`Got text '{text}'\n`)

passed = true

-- Confirmation prompt

local confirmed = stdio.prompt("confirm", "Please confirm", true)
assert(type(confirmed) == "boolean", "Did not get a boolean as result")
print(if confirmed then "Confirmed\n" else "Did not confirm\n")

-- Selection prompt

local option = stdio.prompt(
	"select",
	"Please select the first option from the list",
	{ "one", "two", "three", "four" }
)
assert(option == 1, "Did not get the first option as result")
print(`Got option #{option}\n`)

-- Multi-selection prompt

local options = stdio.prompt(
	"multiselect",
	"Please select options two and four",
	{ "one", "two", "three", "four", "five" }
)
assert(
	options ~= nil and table.find(options, 2) and table.find(options, 4),
	"Did not get options 2 and 4 as result"
)
print(`Got option(s) {stdio.format(options)}\n`)
