class Elelem::TUI

def clear_line

def clear_line
  say("\r#{" " * 80}\r", newline: false)
end

def colourize(text, colour: :default)

def colourize(text, colour: :default)
  case colour
  when :black
    "\e[30m#{text}\e[0m"
  when :red
    "\e[31m#{text}\e[0m"
  when :green
    "\e[32m#{text}\e[0m"
  when :yellow
    "\e[33m#{text}\e[0m"
  when :blue
    "\e[34m#{text}\e[0m"
  when :magenta
    "\e[35m#{text}\e[0m"
  when :cyan
    "\e[36m#{text}\e[0m"
  when :white
    "\e[37m#{text}\e[0m"
  when :gray
    "\e[90m#{text}\e[0m"
  else
    text
  end
end

def complete_progress(message = "Completed")

def complete_progress(message = "Completed")
  clear_line
  show_progress(message, "✓", colour: :green)
end

def initialize(stdin = $stdin, stdout = $stdout)

def initialize(stdin = $stdin, stdout = $stdout)
  @stdin = stdin
  @stdout = stdout
end

def prompt(message)

def prompt(message)
  Reline.readline(message, true)
end

def say(message, colour: :default, newline: false)

def say(message, colour: :default, newline: false)
  if newline
    stdout.puts(colourize(message, colour: colour))
  else
    stdout.print(colourize(message, colour: colour))
  end
  stdout.flush
end

def show_progress(message, icon = ".", colour: :gray)

def show_progress(message, icon = ".", colour: :gray)
  timestamp = Time.now.strftime("%H:%M:%S")
  say("\n[#{icon}] #{timestamp} #{message}", colour: colour, newline: true)
end