Shoes.setup do
	gem 'riddler'
end

require 'riddler'

class ShoesClient < Shoes
	include Riddler	
	url '/', :index
	
	RIGHT = %w[Yes Right Correct Indeed]
	WRONG = %w[No Wrong Sorry Nope]
	
	LINK_INFO = "Click here for more information about the underlying Gem."
	
	def index
		initialize_index
		initialize_questions
		image 200, 120, :top => 0, :left => 0 do
			nostroke
			fill "#2c2"
			# x, y, width, height, corner-radius
			rect 10, 10, 100, 60, 12
			fill "#c22"
			rect 30, 30, 100, 60, 12
			fill "#22c"
			rect 20, 20, 100, 60, 12
		end
		@score = para "Try to make some scores", :left => 160, :top => 60
		stack :top => 100, :left => 40 do
			title "Ruby Riddler", :top => 10, :left => 150
			# 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 :width => '90%' do
				background "#292"

				tagline "Please tell me:"
				@question = para '', :margin => 8
			end
		
			stack :margin => 10 do
				caption "Your answer"
		  		@input = edit_line :width => '90%'
				flow do
					button "Answer" do
						answer()
		  			end
					button "I don't know" do
						show_answer
		  			end
	  			end
				@result = para '', :margin => 10
			end
		end # end stack
		stack do
			@link = para LINK_INFO, :left => 40 
			click do
					visit "http://soleone.vs1814.vserver4free.de/pages/riddler"				
			end
			hover do
				@link.replace "Click now to open in browser..."
				@link.style :stroke => '#22c'
			end
			leave do
				@link.replace LINK_INFO
				@link.style :stroke => '#000'
			end
		end
	end	

	def walk
		Shoes.app :width => 500
	end
	
private
	def initialize_index
		@points = 0
		@session = Session.new(ENV['USERNAME'])
		@riddle, @question, @input, @result = nil
	end
	
	def initialize_questions
		@questions ||= Riddler.load_riddles_from_server
	end
	
	def answer
		return unless @riddle
		attempt = Attempt.new(@session.user, @riddle)
		attempt.solve_with!(@input.text)
		@result.replace(attempt.solved? ? random(RIGHT) : random(WRONG))
		# increase score
		@points += 1 if attempt.solved?
		@score.replace "You have #{@points} points."
		@riddle = nil
		show_riddle
	end
			
	def show_riddle
		question = @riddle ? @riddle.text : "No riddle selected."
		@question.replace(question)
		@result.replace "" if @riddle
		@input.text = ""
	end
	
	def show_answer
		@result.replace "The answer is: #{@riddle.result}" 
	end
	
	def random(array)
		array[rand(array.size)]	
	end
end

# start a new game if run from the command line
ShoesClient.new.walk if $0 == __FILE__