Shoes.setup do
	gem 'riddler'
end

require 'riddler'

class ShoesClient < Shoes
	include Riddler	
	url '/', :index
	
	def index
		initialize_index
		stack do
			title "Ruby Riddler"
			# link("Visit Homepage", :click => '/')
		
			stack do
				flow :margin => 10 do
	  				button "Basic Riddle" do
						@riddle = NumberRiddle.new(2)
				  		show_riddle
			  		end
			  		button "Random Riddle" do
		  				@riddle = NumberRiddle.new(2, false)
		  				show_riddle
					end
					button "Text Question" do
						@riddle = @questions[rand(@questions.size)]
						show_riddle
					end
				end
			end
		
			stack do
				background "#292", :radius => 12

				tagline "Please tell me:"
				@question = para ''
			end
		
			stack :margin => 10 do
				keypress do |key|
					answer()
				end
				caption "Your answer"
		  		@input = edit_line :width => '100%'
				button "Answer" do
					answer()
	  			end
				@result = para ''
			end
		
		end # end stack
	end	

	def initialize_index
		@session = Session.new(ENV['USERNAME'])
		@riddle, @question, @input, @result = nil
		@questions = Riddler.load_riddles_from_server		
	end
	
	def walk
		Shoes.app :width => 400
	end
	
	def answer
		attempt = Attempt.new(@session.user, @riddle)
		attempt.solve_with!(@input.text)
		@result.replace(attempt.solved? ? "Yes!" : "Nope, sorry")
	end
			
	def show_riddle
		@question.replace(@riddle.text)
		@result.replace ""
		@input.text = ""
	end
end

# start a new game if run from the command line
ShoesClient.new.walk if $0 == __FILE__