class Sus::Output::Bar

def self.register(output)

def self.register(output)
	output[:progress_bar] ||= output.style(:blue, :white)
end

def draw(value, width)

def draw(value, width)
	blocks = width * value
	full_blocks = blocks.floor
	partial_block = ((blocks - full_blocks) * BLOCK.size).floor
	
	if partial_block.zero?
		BLOCK.last * full_blocks
	else
		"#{BLOCK.last * full_blocks}#{BLOCK[partial_block]}"
	end.ljust(width)
end

def initialize(current = 0, total = 0, message = nil)

def initialize(current = 0, total = 0, message = nil)
	@maximum_message_width = 0
	
	@current = current
	@total = total
	@message = message
end

def print(output)

def print(output)
	width = output.width
	
	unless @total.zero?
		value = @current.to_f / @total.to_f
	else
		value = 0.0
	end
	
	if @message
		message = @message + MESSAGE_SUFFIX
		if message.size > @maximum_message_width
			@maximum_message_width = message.size
		end
		
		if @maximum_message_width < (width - MINIMUM_WIDTH)
			width -= @maximum_message_width
			message = message.rjust(@maximum_message_width)
		else
			@maximum_message_width = 0
			message = nil
		end
	end
	
	if message
		output.write(message)
	end
	
	output.write(
		:progress_bar, draw(value, width), :reset,
	)
	
	output.puts
end

def update(current, total, message)

def update(current, total, message)
	@current = current
	@total = total
	@message = message
end